1
0
mirror of synced 2026-02-03 18:01:02 -05:00

Compare commits

...

26 Commits

Author SHA1 Message Date
github-actions[bot]
b364af7f57 Version Packages (alpha) (#3516)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-07-14 16:07:20 +02:00
Fran Zekan
20fc9f80f4 Fix SSP / SP not prefetching queries correctly (#3518)
* Fix prefetchQuery getting key for infinite wrong

* Add new webpack loader to transform resolvers server-side to have _routePath and other meta values

* Fix key error when loading dehydrated props

* Add unit-tests for loader-server-resolvers.ts
2022-07-12 14:41:26 +02:00
Aleksandra
80e1ead7cb Create jest.config.js with new app generator (#3532)
* Create jest.config.js with new app generator
2022-07-12 11:44:36 +02:00
Fran Zekan
a3bbe6ce3f Fix routes manifest showing duplicates for non queries|resolvers reso… (#3531)
* Fix routes manifest showing duplicates for non queries|resolvers resolver type

* Simplify resolverType checking
2022-07-12 11:36:59 +02:00
Fran Zekan
348fd6f5e4 Fix redirectAuthenticatedTo errors (#3529)
* Wrap BlitzProvider from next with RouterContext
2022-07-11 21:47:16 +02:00
Dawid Urbaniak
cacb65d633 fix: fix wrong import of the db module in blitz db seed command function (#3526)
* fix: fix wrong import of the db module
2022-07-11 11:35:08 +02:00
Fran Zekan
f397cc2036 Fix switch case fall-through bug in CLI (#3525)
* Fix redundant if

* Fix switch fallthrough cases

* Extract install map to top

* Create cool-horses-check.md

Co-authored-by: Dillon Raphael <dillon@creatorsneverdie.com>
2022-07-11 10:30:03 +02:00
Fran Zekan
ffa7b5ccc2 If project name argument is set to "." change it to current folder name (#3523)
* If project name argument is set to "." change it to current folder name

* Create two-carpets-rhyme.md

Co-authored-by: Dillon Raphael <dillon@creatorsneverdie.com>
2022-07-11 10:22:03 +02:00
Aleksandra
a961aff881 Add missing lint deps (#3515) 2022-07-07 16:45:02 +02:00
github-actions[bot]
ac9c4cebc8 Version Packages (alpha) (#3514)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-07-07 15:43:57 +02:00
Dillon Raphael
a7e37c58db Export BlitzProvider from blitz-next (#3513)
Co-authored-by: Aleksandra <alexsandra.sikora@gmail.com>
2022-07-07 15:36:52 +02:00
Brandon Bayer
b0d2505a85 Update CODEOWNERS 2022-07-06 23:54:29 +02:00
github-actions[bot]
024cd819e3 Version Packages (alpha) (#3512)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-07-06 19:25:31 +02:00
Dillon Raphael
12cb7a727d Upgrade Prisma to v4.0.0 (#3511)
* Upgrade Prisma to v4.0.0

* Changeset
2022-07-06 19:21:36 +02:00
github-actions[bot]
923703b661 Version Packages (alpha) (#3510)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-07-06 18:26:09 +02:00
Dillon Raphael
70f9ae4921 Handle next/dynamic default import in codemod (#3509) 2022-07-06 18:21:45 +02:00
beerose
c738ecacbc Remove --tag option from release script 2022-07-06 17:07:55 +02:00
github-actions[bot]
ad0b087d9f Version Packages (alpha) (#3507)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-07-06 16:03:29 +02:00
Dillon Raphael
dc694cf1cf remove mounted check from withBlitz (#3504)
Co-authored-by: Aleksandra <alexsandra.sikora@gmail.com>
2022-07-06 15:59:18 +02:00
Aleksandra
4c221b655e Tag @blitzjs/rpc and @blitzjs/auth with alpha, update package.json files (#3508) 2022-07-06 13:56:25 +02:00
Aleksandra
c11f0401cf Update Next.js version and addBasePath location (#3506) 2022-07-06 13:14:48 +02:00
github-actions[bot]
830b51d0dc Version Packages (alpha) (#3492)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-07-04 17:39:14 +02:00
David
bec9512e30 Expand & rename baseResolverPath (#3421)
Co-authored-by: beerose <alexsandra.sikora@gmail.com>
2022-07-04 17:35:36 +02:00
Dillon Raphael
1493729d6b forked changesets action 2022-07-04 16:48:30 +02:00
Dillon Raphael
6bb5980da9 revert changesets action version 2022-07-04 15:44:21 +02:00
Dillon Raphael
7310f7171d use forked changesets github action 2022-07-04 15:32:28 +02:00
75 changed files with 1085 additions and 546 deletions

View File

@@ -0,0 +1,5 @@
---
"blitz": patch
---
Fixes issue when generating a new blitz app with the form flag that ends up installing the wrong form library

View File

@@ -0,0 +1,5 @@
---
"blitz": patch
---
Fixes wrong import of the db module in `blitz db seed` command function

View File

@@ -0,0 +1,6 @@
---
"@blitzjs/rpc": patch
"@blitzjs/generator": patch
---
Update Next.js version and addBasePath location

View File

@@ -0,0 +1,6 @@
---
"@blitzjs/next": patch
"blitz": patch
---
Fix redirectAuthenticatedTo errors

View File

@@ -0,0 +1,5 @@
---
"@blitzjs/next": patch
---
Export BlitzProvider from @blitzjs/next

View File

@@ -0,0 +1,7 @@
---
"@blitzjs/next": patch
"@blitzjs/rpc": patch
"blitz": patch
---
Fix SSP / SP not prefetching queries correctly

View File

@@ -0,0 +1,5 @@
---
"@blitzjs/generator": patch
---
Add missing lint deps to the new app templates

View File

@@ -0,0 +1,5 @@
---
"@blitzjs/codemod": patch
---
Handle next/dynamic default import in codemod

View File

@@ -25,6 +25,7 @@
"breezy-cameras-double",
"bright-mangos-run",
"cool-doors-invent",
"cool-horses-check",
"dirty-monkeys-greet",
"eleven-humans-sort",
"empty-berries-rule",
@@ -37,41 +38,52 @@
"four-meals-fry",
"fuzzy-jars-admire",
"gentle-dogs-reply",
"good-apes-drum",
"good-insects-wink",
"great-months-train",
"green-papayas-do",
"healthy-rice-shout",
"hot-drinks-approve",
"late-steaks-give",
"lemon-games-press",
"lovely-colts-share",
"lucky-cows-try",
"modern-cameras-pull",
"moody-bags-walk",
"moody-squids-cheer",
"nervous-beds-travel",
"nervous-dolls-rule",
"new-coats-turn",
"nice-deers-dream",
"nice-starfishes-live",
"nine-birds-confess",
"nine-onions-admire",
"ninety-pets-heal",
"olive-bees-buy",
"olive-feet-rhyme",
"olive-sheep-rhyme",
"plenty-bottles-swim",
"poor-peas-lick",
"poor-penguins-look",
"poor-shrimps-think",
"popular-teachers-pay",
"purple-singers-greet",
"quiet-feet-travel",
"quiet-pans-hunt",
"quiet-sloths-rule",
"rich-chairs-invent",
"rich-queens-travel",
"sharp-falcons-begin",
"shy-olives-hang",
"silent-colts-reply",
"slimy-needles-taste",
"slow-walls-poke",
"small-socks-confess",
"smooth-planets-admire",
"strong-apes-reply",
"stupid-walls-sell",
"swift-drinks-dress",
"tall-meals-learn",
"tame-keys-reply",
"tasty-news-collect",
"ten-hairs-listen",
@@ -79,7 +91,9 @@
"tender-pianos-check",
"thick-parrots-float",
"thirty-countries-build",
"tidy-clouds-smoke",
"twenty-beans-pump",
"two-carpets-rhyme",
"two-kiwis-help",
"two-tigers-type",
"unlucky-papayas-sleep",

View File

@@ -0,0 +1,5 @@
---
"@blitzjs/next": patch
---
Removes the check for when withBlitz is mounted before rendering the users app. We had this previously to avoid the react 18 suspense error being showin in development with nextjs.

View File

@@ -0,0 +1,6 @@
---
"@blitzjs/next": patch
"@blitzjs/generator": patch
---
Add jest.config.js to newly generated typescript apps

View File

@@ -0,0 +1,6 @@
---
"@blitzjs/next": patch
"@blitzjs/rpc": patch
---
Allow resolverPath to be a function which is ran for every file path that is converted to RPC Route

View File

@@ -0,0 +1,5 @@
---
"@blitzjs/generator": patch
---
Upgrade Prisma to v4.0.0

View File

@@ -0,0 +1,5 @@
---
"blitz": patch
---
Fix routes manifest showing duplicates for non queries|resolvers reso…

View File

@@ -0,0 +1,5 @@
---
"blitz": patch
---
During `blitz new` if project name argument is set to "." change it to current folder name

View File

@@ -1,43 +0,0 @@
name-template: "v$RESOLVED_VERSION"
tag-template: "v$RESOLVED_VERSION"
# categories:
# - title: 'Blitz'
# label: 'blitz'
# - title: '@blitzjs/next'
# label: 'blitz-next'
# - title: '@blitzjs/rpc'
# label: 'blitz-rpc'
# - title: '@blitzjs/auth'
# label: 'blitz-auth'
version-resolver:
major:
labels:
- "major"
minor:
labels:
- "minor"
patch:
labels:
- "patch"
default: patch
# autolabeler:
# - label: 'blitz'
# title:
# - '/blitz/i'
# - label: 'blitz-next'
# title:
# - '/@blitzjs\/next/i'
# - label: 'blitz-rpc'
# title:
# - '/@blitzjs\/rpc/i'
# - label: 'blitz-auth'
# title:
# - '/@blitzjs\/auth/i'
template: |
## Whats Changed
$CHANGES
## Contributors
$CONTRIBUTORS

View File

@@ -42,10 +42,10 @@ jobs:
- run: pnpm build
- name: Create Release Pull Request
uses: changesets/action@v1
uses: blitz-js/changesets-action@main
with:
publish: pnpm release
createGithubReleases: false
createGithubReleases: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

View File

@@ -29,14 +29,14 @@
"@blitzjs/rpc": "workspace:*",
"@hookform/resolvers": "2.8.8",
"@prisma/client": "3.9.0",
"blitz": "workspace:2.0.0-alpha.48",
"next": "12.1.6-canary.17",
"prisma": "3.9.0",
"blitz": "workspace:2.0.0-alpha.54",
"next": "12.2.0",
"prisma": "4.0.0",
"react": "18.0.0",
"react-dom": "18.0.0",
"react-hook-form": "7.29.0",
"ts-node": "10.7.0",
"zod": "3.10.1"
"zod": "3.17.3"
},
"devDependencies": {
"@next/bundle-analyzer": "12.0.8",
@@ -46,7 +46,10 @@
"@types/node": "17.0.16",
"@types/preview-email": "2.0.1",
"@types/react": "18.0.1",
"@typescript-eslint/eslint-plugin": "5.9.1",
"eslint": "7.32.0",
"eslint-config-next": "12.2.0",
"eslint-config-prettier": "8.5.0",
"husky": "7.0.4",
"jest": "27.5.1",
"lint-staged": "12.1.7",

View File

@@ -10,7 +10,6 @@ module.exports = withBlitz(
customServer: {
hotReload: false,
},
resolverBasePath: "root",
},
}),
)

View File

@@ -25,10 +25,10 @@
"@types/passport-twitter": "1.0.37",
"blitz": "workspace:*",
"jest": "27.5.1",
"next": "12.1.6-canary.17",
"next": "12.2.0",
"passport-mock-strategy": "2.0.0",
"passport-twitter": "1.0.4",
"prisma": "3.9.0",
"prisma": "4.0.0",
"react": "18.0.0",
"react-dom": "18.0.0",
"ts-node": "10.7.0"

View File

@@ -1,6 +1,6 @@
import {ErrorFallbackProps, ErrorComponent, ErrorBoundary, AppProps} from "@blitzjs/next"
import {AuthenticationError, AuthorizationError} from "blitz"
import React from "react"
import React, {Suspense} from "react"
import {withBlitz} from "app/blitz-client"
function RootErrorFallback({error}: ErrorFallbackProps) {
@@ -26,7 +26,9 @@ function RootErrorFallback({error}: ErrorFallbackProps) {
function MyApp({Component, pageProps}: AppProps) {
return (
<ErrorBoundary FallbackComponent={RootErrorFallback}>
<Component {...pageProps} />
<Suspense fallback="Loading...">
<Component {...pageProps} />
</Suspense>
</ErrorBoundary>
)
}

View File

@@ -19,8 +19,8 @@
"@prisma/client": "3.9.0",
"blitz": "workspace:*",
"lowdb": "3.0.0",
"next": "12.1.6-canary.17",
"prisma": "3.9.0",
"next": "12.2.0",
"prisma": "4.0.0",
"react": "18.0.0",
"react-dom": "18.0.0"
},

View File

@@ -1,6 +1,6 @@
import {ErrorFallbackProps, ErrorComponent, ErrorBoundary, AppProps} from "@blitzjs/next"
import {AuthenticationError, AuthorizationError} from "blitz"
import React from "react"
import React, {Suspense} from "react"
import {withBlitz} from "../app/blitz-client"
function RootErrorFallback({error}: ErrorFallbackProps) {
@@ -25,9 +25,11 @@ function RootErrorFallback({error}: ErrorFallbackProps) {
function MyApp({Component, pageProps}: AppProps) {
return (
<ErrorBoundary FallbackComponent={RootErrorFallback}>
<Component {...pageProps} />
</ErrorBoundary>
<Suspense fallback="Loading...">
<ErrorBoundary FallbackComponent={RootErrorFallback}>
<Component {...pageProps} />
</ErrorBoundary>
</Suspense>
)
}

View File

@@ -1,4 +1,2 @@
const {withBlitz} = require("@blitzjs/next")
module.exports = withBlitz({
// update me
})
module.exports = withBlitz({})

View File

@@ -15,7 +15,7 @@
"@blitzjs/next": "workspace:*",
"@blitzjs/rpc": "workspace:*",
"blitz": "workspace:*",
"next": "12.1.6-canary.17",
"next": "12.2.0",
"react": "18.0.0",
"react-dom": "18.0.0"
},

View File

@@ -1,6 +1,6 @@
import {ErrorFallbackProps, ErrorComponent, ErrorBoundary, AppProps} from "@blitzjs/next"
import {AuthenticationError, AuthorizationError} from "blitz"
import React from "react"
import React, {Suspense} from "react"
import {withBlitz} from "../app/blitz-client"
function RootErrorFallback({error}: ErrorFallbackProps) {
@@ -25,9 +25,11 @@ function RootErrorFallback({error}: ErrorFallbackProps) {
function MyApp({Component, pageProps}: AppProps) {
return (
<ErrorBoundary FallbackComponent={RootErrorFallback}>
<Component {...pageProps} />
</ErrorBoundary>
<Suspense fallback="Loading...">
<ErrorBoundary FallbackComponent={RootErrorFallback}>
<Component {...pageProps} />
</ErrorBoundary>
</Suspense>
)
}

View File

@@ -19,8 +19,8 @@
"@prisma/client": "3.9.0",
"blitz": "workspace:*",
"lowdb": "3.0.0",
"next": "12.1.6-canary.17",
"prisma": "3.9.0",
"next": "12.2.0",
"prisma": "4.0.0",
"react": "18.0.0",
"react-dom": "18.0.0"
},

View File

@@ -1,6 +1,6 @@
import {ErrorFallbackProps, ErrorComponent, ErrorBoundary, AppProps} from "@blitzjs/next"
import {AuthenticationError, AuthorizationError} from "blitz"
import React from "react"
import React, {Suspense} from "react"
import {withBlitz} from "../app/blitz-client"
function RootErrorFallback({error}: ErrorFallbackProps) {
@@ -25,9 +25,11 @@ function RootErrorFallback({error}: ErrorFallbackProps) {
function MyApp({Component, pageProps}: AppProps) {
return (
<ErrorBoundary FallbackComponent={RootErrorFallback}>
<Component {...pageProps} />
</ErrorBoundary>
<Suspense fallback="Loading...">
<ErrorBoundary FallbackComponent={RootErrorFallback}>
<Component {...pageProps} />
</ErrorBoundary>
</Suspense>
)
}

View File

@@ -14,8 +14,8 @@
"@blitzjs/rpc": "workspace:*",
"@prisma/client": "3.9.0",
"blitz": "workspace:*",
"next": "12.1.6-canary.17",
"prisma": "3.9.0",
"next": "12.2.0",
"prisma": "4.0.0",
"react": "18.0.0",
"react-dom": "18.0.0",
"react-query": "3.39.0"

View File

@@ -1,4 +1,4 @@
const {withBlitz} = require("@blitzjs/next")
module.exports = withBlitz({
target: 'experimental-serverless-trace',
target: "experimental-serverless-trace",
})

View File

@@ -12,7 +12,7 @@
"@blitzjs/next": "workspace:*",
"@blitzjs/rpc": "workspace:*",
"blitz": "workspace:*",
"next": "12.1.6-canary.17",
"next": "12.2.0",
"react": "18.0.0",
"react-dom": "18.0.0"
},

View File

@@ -22,8 +22,8 @@
"@prisma/client": "3.9.0",
"blitz": "workspace:*",
"lowdb": "3.0.0",
"next": "12.1.6-canary.17",
"prisma": "3.9.0",
"next": "12.2.0",
"prisma": "4.0.0",
"react": "18.0.0",
"react-dom": "18.0.0"
},

View File

@@ -1,6 +1,6 @@
import {ErrorFallbackProps, ErrorComponent, ErrorBoundary, AppProps} from "@blitzjs/next"
import {AuthenticationError, AuthorizationError} from "blitz"
import React from "react"
import React, {Suspense} from "react"
import {withBlitz} from "../app/blitz-client"
function RootErrorFallback({error}: ErrorFallbackProps) {
@@ -25,9 +25,11 @@ function RootErrorFallback({error}: ErrorFallbackProps) {
function MyApp({Component, pageProps}: AppProps) {
return (
<ErrorBoundary FallbackComponent={RootErrorFallback}>
<Component {...pageProps} />
</ErrorBoundary>
<Suspense fallback="Loading...">
<ErrorBoundary FallbackComponent={RootErrorFallback}>
<Component {...pageProps} />
</ErrorBoundary>
</Suspense>
)
}

View File

@@ -28,9 +28,8 @@
"husky": "7.0.4",
"jsdom": "^19.0.0",
"lint-staged": "12.1.7",
"next": "12.1.6-canary.17",
"next": "12.2.0",
"only-allow": "1.1.0",
"patch-package": "6.4.7",
"prettier": "^2.5.1",
"prettier-plugin-prisma": "3.8.0",
"pretty-quick": "3.1.3",
@@ -39,5 +38,5 @@
"wait-on": "6.0.1"
},
"npmClient": "pnpm",
"packageManager": "pnpm@6.21.0"
"packageManager": "pnpm@7.4.0-1"
}

View File

@@ -1,5 +1,47 @@
# @blitzjs/auth
## 2.0.0-alpha.54
### Patch Changes
- Updated dependencies [f397cc20]
- Updated dependencies [cacb65d6]
- Updated dependencies [348fd6f5]
- Updated dependencies [20fc9f80]
- Updated dependencies [a3bbe6ce]
- Updated dependencies [ffa7b5cc]
- blitz@2.0.0-alpha.54
## 2.0.0-alpha.53
### Patch Changes
- blitz@2.0.0-alpha.53
## 2.0.0-alpha.52
### Patch Changes
- blitz@2.0.0-alpha.52
## 2.0.0-alpha.51
### Patch Changes
- blitz@2.0.0-alpha.51
## 2.0.0-alpha.50
### Patch Changes
- blitz@2.0.0-alpha.50
## 2.0.0-alpha.49
### Patch Changes
- blitz@2.0.0-alpha.49
## 2.0.0-alpha.48
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@blitzjs/auth",
"version": "2.0.0-alpha.48",
"version": "2.0.0-alpha.54",
"scripts": {
"build": "unbuild",
"predev": "wait-on -d 250 ../blitz/dist/index-server.d.ts",
@@ -26,7 +26,7 @@
"@types/secure-password": "3.1.1",
"b64-lite": "1.4.0",
"bad-behavior": "1.0.1",
"blitz": "2.0.0-alpha.48",
"blitz": "2.0.0-alpha.54",
"cookie": "0.4.1",
"cookie-session": "2.0.0",
"debug": "4.3.3",
@@ -39,7 +39,7 @@
"url": "0.11.0"
},
"devDependencies": {
"@blitzjs/config": "workspace:2.0.0-alpha.48",
"@blitzjs/config": "workspace:2.0.0-alpha.54",
"@testing-library/react": "13.0.0",
"@testing-library/react-hooks": "7.0.2",
"@types/cookie": "0.4.1",

View File

@@ -57,7 +57,7 @@ export type VerifyCallbackResult = {
export type ApiHandlerIncomingMessage = IncomingMessage & {
query: {
[key: string]: string | string[]
[key: string]: string | string[] | undefined
}
}

View File

@@ -1,5 +1,50 @@
# @blitzjs/next
## 2.0.0-alpha.54
### Patch Changes
- 348fd6f5: Fix redirectAuthenticatedTo errors
- 20fc9f80: Fix SSP / SP not prefetching queries correctly
- 80e1ead7: Add jest.config.js to newly generated typescript apps
- Updated dependencies [20fc9f80]
- @blitzjs/rpc@2.0.0-alpha.54
## 2.0.0-alpha.53
### Patch Changes
- a7e37c58: Export BlitzProvider from @blitzjs/next
- @blitzjs/rpc@2.0.0-alpha.53
## 2.0.0-alpha.52
### Patch Changes
- @blitzjs/rpc@2.0.0-alpha.52
## 2.0.0-alpha.51
### Patch Changes
- @blitzjs/rpc@2.0.0-alpha.51
## 2.0.0-alpha.50
### Patch Changes
- dc694cf1: Removes the check for when withBlitz is mounted before rendering the users app. We had this previously to avoid the react 18 suspense error being showin in development with nextjs.
- Updated dependencies [c11f0401]
- @blitzjs/rpc@2.0.0-alpha.50
## 2.0.0-alpha.49
### Patch Changes
- bec9512e: Allow resolverPath to be a function which is ran for every file path that is converted to RPC Route
- Updated dependencies [bec9512e]
- @blitzjs/rpc@2.0.0-alpha.49
## 2.0.0-alpha.48
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@blitzjs/next",
"version": "2.0.0-alpha.48",
"version": "2.0.0-alpha.54",
"scripts": {
"build": "unbuild",
"dev": "pnpm predev && pnpm watch unbuild src --wait=0.2",
@@ -18,12 +18,13 @@
"sideEffects": false,
"license": "MIT",
"files": [
"jest/**",
"dist/**",
"scripts/**",
"eslint.js"
],
"dependencies": {
"@blitzjs/rpc": "2.0.0-alpha.48",
"@blitzjs/rpc": "2.0.0-alpha.54",
"@types/hoist-non-react-statics": "3.3.1",
"debug": "4.3.3",
"fs-extra": "10.0.1",
@@ -32,7 +33,7 @@
"superjson": "1.8.0"
},
"devDependencies": {
"@blitzjs/config": "workspace:2.0.0-alpha.48",
"@blitzjs/config": "workspace:2.0.0-alpha.54",
"@testing-library/dom": "8.13.0",
"@testing-library/jest-dom": "5.16.3",
"@testing-library/react": "13.0.0",
@@ -42,10 +43,10 @@
"@types/react": "18.0.1",
"@types/react-dom": "17.0.14",
"@types/testing-library__react-hooks": "4.0.0",
"blitz": "2.0.0-alpha.48",
"blitz": "2.0.0-alpha.54",
"cross-spawn": "7.0.3",
"find-up": "4.1.0",
"next": "12.1.6-canary.17",
"next": "12.2.0",
"react": "18.0.0",
"react-dom": "18.0.0",
"resolve-from": "5.0.0",
@@ -58,7 +59,7 @@
"access": "public"
},
"peerDependencies": {
"next": "*",
"next": ">=12.2.0",
"react": "*"
}
}

View File

@@ -13,7 +13,8 @@ import {withSuperJSONPage} from "./superjson"
import {Ctx} from "blitz"
import {UrlObject} from "url"
import {AppPropsType} from "next/dist/shared/lib/utils"
import {Router} from "next/router"
import {Router, useRouter} from "next/router"
import {RouterContext} from "./router-context"
export * from "./error-boundary"
export * from "./error-component"
@@ -35,11 +36,7 @@ const buildWithBlitz = <TPlugins extends readonly ClientPlugin<object>[]>(plugin
const BlitzOuterRoot = (props: AppProps) => {
const component = React.useMemo(() => withPlugins(props.Component), [props.Component])
const [mounted, setMounted] = React.useState(false)
React.useEffect(() => {
// Current workaround to fix react 18 suspense error issue
setMounted(true)
// supress first render flicker
setTimeout(() => {
document.documentElement.classList.add("blitz-first-render-complete")
@@ -51,7 +48,7 @@ const buildWithBlitz = <TPlugins extends readonly ClientPlugin<object>[]>(plugin
<>
{/* @ts-ignore todo */}
{props.Component.suppressFirstRenderFlicker && <NoPageFlicker />}
{mounted && <UserAppRoot {...props} Component={component} />}
<UserAppRoot {...props} Component={component} />
</>
</BlitzProvider>
)
@@ -71,6 +68,7 @@ export type BlitzProviderProps = {
interface RouteUrlObject extends Pick<UrlObject, "pathname" | "query"> {
pathname: string
}
type RedirectAuthenticatedTo = string | RouteUrlObject | false
type RedirectAuthenticatedToFnCtx = {
session: Ctx["session"]["$publicData"]
@@ -89,27 +87,31 @@ export type BlitzLayout<P = {}> = React.ComponentType<P> & {
export type AppProps<P = {}> = AppPropsType<Router, P> & {
Component: BlitzPage
}
const BlitzProvider = ({
client,
export const BlitzProvider = ({
client = globalThis.queryClient,
contextSharing = false,
dehydratedState,
hydrateOptions,
children,
}: BlitzProviderProps) => {
if (globalThis.queryClient) {
const router = useRouter()
if (client) {
return (
<QueryClientProvider
client={client || globalThis.queryClient}
contextSharing={contextSharing}
>
<Hydrate state={dehydratedState} options={hydrateOptions}>
{children}
</Hydrate>
</QueryClientProvider>
<RouterContext.Provider value={router}>
<QueryClientProvider
client={client || globalThis.queryClient}
contextSharing={contextSharing}
>
<Hydrate state={dehydratedState} options={hydrateOptions}>
{children}
</Hydrate>
</QueryClientProvider>
</RouterContext.Provider>
)
}
return children
return <RouterContext.Provider value={router}>{children}</RouterContext.Provider>
}
export type PluginsExports<TPlugins extends readonly ClientPlugin<object>[]> = Simplify<

View File

@@ -17,11 +17,17 @@ import type {
MiddlewareResponse,
} from "blitz"
import {handleRequestWithMiddleware, startWatcher, stopWatcher} from "blitz"
import {dehydrate, getQueryKey, getInfiniteQueryKey, loaderClient, loaderServer} from "@blitzjs/rpc"
import {
dehydrate,
getInfiniteQueryKey,
getQueryKey,
installWebpackConfig,
InstallWebpackConfigOptions,
ResolverPathOptions,
} from "@blitzjs/rpc"
import {DefaultOptions, QueryClient} from "react-query"
import {IncomingMessage, ServerResponse} from "http"
import {withSuperJsonProps} from "./superjson"
import {ResolverBasePath} from "@blitzjs/rpc/src/index-server"
import {ParsedUrlQuery} from "querystring"
import {PreviewData} from "next/types"
@@ -98,7 +104,7 @@ export const setupBlitzServer = ({plugins, onError}: SetupBlitzOptions) => {
) => {
queryClient = new QueryClient({defaultOptions})
const queryKey = infinite ? getQueryKey(fn, input) : getInfiniteQueryKey(fn, input)
const queryKey = infinite ? getInfiniteQueryKey(fn, input) : getQueryKey(fn, input)
await queryClient.prefetchQuery(queryKey, () => fn(input, ctx))
}
@@ -130,7 +136,7 @@ export const setupBlitzServer = ({plugins, onError}: SetupBlitzOptions) => {
) => {
queryClient = new QueryClient({defaultOptions})
const queryKey = infinite ? getQueryKey(fn, input) : getInfiniteQueryKey(fn, input)
const queryKey = infinite ? getInfiniteQueryKey(fn, input) : getQueryKey(fn, input)
await queryClient.prefetchQuery(queryKey, () => fn(input, ctx))
}
@@ -163,59 +169,13 @@ export const setupBlitzServer = ({plugins, onError}: SetupBlitzOptions) => {
export interface BlitzConfig extends NextConfig {
blitz?: {
resolverBasePath?: ResolverBasePath
resolverPath?: ResolverPathOptions
customServer?: {
hotReload?: boolean
}
}
}
interface WebpackRuleOptions {
resolverBasePath?: ResolverBasePath
}
interface WebpackRule {
test: RegExp
use: Array<{
loader: string
options: WebpackRuleOptions
}>
}
interface InstallWebpackConfigOptions {
webpackConfig: {
module: {
rules: WebpackRule[]
}
}
nextConfig: BlitzConfig
}
export function installWebpackConfig({webpackConfig, nextConfig}: InstallWebpackConfigOptions) {
const options: WebpackRuleOptions = {
resolverBasePath: nextConfig.blitz?.resolverBasePath,
}
webpackConfig.module.rules.push({
test: /\/\[\[\.\.\.blitz]]\.[jt]s$/,
use: [
{
loader: loaderServer,
options,
},
],
})
webpackConfig.module.rules.push({
test: /[\\/](queries|mutations)[\\/]/,
use: [
{
loader: loaderClient,
options,
},
],
})
}
export function withBlitz(nextConfig: BlitzConfig = {}) {
if (
process.env.NODE_ENV !== "production" &&
@@ -236,7 +196,12 @@ export function withBlitz(nextConfig: BlitzConfig = {}) {
const config = Object.assign({}, nextConfig, {
webpack: (config: InstallWebpackConfigOptions["webpackConfig"], options: any) => {
installWebpackConfig({webpackConfig: config, nextConfig})
installWebpackConfig({
webpackConfig: config,
webpackRuleOptions: {
resolverPath: nextConfig.blitz?.resolverPath,
},
})
if (typeof nextConfig.webpack === "function") {
return nextConfig.webpack(config, options)
}
@@ -259,8 +224,8 @@ function withDehydratedState<T extends Result>(result: T, queryClient: QueryClie
if (!queryClient) {
return result
}
const dehydratedProps = dehydrate(queryClient)
return {...result, props: {...("props" in result ? result.props : undefined), dehydratedProps}}
const dehydratedState = dehydrate(queryClient)
return {...result, props: {...("props" in result ? result.props : undefined), dehydratedState}}
}
declare module "blitz" {

View File

@@ -1,5 +1,56 @@
# @blitzjs/rpc
## 2.0.0-alpha.54
### Patch Changes
- 20fc9f80: Fix SSP / SP not prefetching queries correctly
- Updated dependencies [f397cc20]
- Updated dependencies [cacb65d6]
- Updated dependencies [348fd6f5]
- Updated dependencies [20fc9f80]
- Updated dependencies [a3bbe6ce]
- Updated dependencies [ffa7b5cc]
- blitz@2.0.0-alpha.54
- @blitzjs/auth@2.0.0-alpha.54
## 2.0.0-alpha.53
### Patch Changes
- @blitzjs/auth@2.0.0-alpha.53
- blitz@2.0.0-alpha.53
## 2.0.0-alpha.52
### Patch Changes
- blitz@2.0.0-alpha.52
- @blitzjs/auth@2.0.0-alpha.52
## 2.0.0-alpha.51
### Patch Changes
- @blitzjs/auth@2.0.0-alpha.51
- blitz@2.0.0-alpha.51
## 2.0.0-alpha.50
### Patch Changes
- c11f0401: Update Next.js version and addBasePath location
- blitz@2.0.0-alpha.50
- @blitzjs/auth@2.0.0-alpha.50
## 2.0.0-alpha.49
### Patch Changes
- bec9512e: Allow resolverPath to be a function which is ran for every file path that is converted to RPC Route
- @blitzjs/auth@2.0.0-alpha.49
- blitz@2.0.0-alpha.49
## 2.0.0-alpha.48
### Patch Changes

View File

@@ -5,6 +5,7 @@ const config: BuildConfig = {
"./src/index-browser",
"./src/index-server",
"./src/loader-server",
"./src/loader-server-resolvers",
"./src/loader-client",
],
externals: [

View File

@@ -1,6 +1,6 @@
{
"name": "@blitzjs/rpc",
"version": "2.0.0-alpha.48",
"version": "2.0.0-alpha.54",
"scripts": {
"build": "unbuild",
"predev": "wait-on -d 250 ../blitz/dist/index-server.d.ts && wait-on -d 250 ../blitz-auth/dist/index-browser.d.ts",
@@ -20,22 +20,22 @@
"dist/**"
],
"dependencies": {
"@blitzjs/auth": "2.0.0-alpha.48",
"@blitzjs/auth": "2.0.0-alpha.54",
"b64-lite": "1.4.0",
"bad-behavior": "1.0.1",
"chalk": "^4.1.0",
"debug": "4.3.3",
"react-query": "3.39.0",
"superjson": "1.8.0",
"zod": "3.10.1"
"zod": "3.17.3"
},
"devDependencies": {
"@blitzjs/config": "workspace:2.0.0-alpha.48",
"@blitzjs/config": "workspace:2.0.0-alpha.54",
"@types/debug": "4.1.7",
"@types/react": "18.0.1",
"@types/react-dom": "17.0.14",
"blitz": "2.0.0-alpha.48",
"next": "12.1.6-canary.17",
"blitz": "2.0.0-alpha.54",
"next": "12.2.0",
"react": "18.0.0",
"react-dom": "18.0.0",
"typescript": "^4.5.3",
@@ -43,8 +43,8 @@
"watch": "1.0.2"
},
"peerDependencies": {
"blitz": "2.0.0-alpha.48",
"next": "*"
"blitz": "2.0.0-alpha.54",
"next": ">=12.2.0"
},
"publishConfig": {
"access": "public"

View File

@@ -1,5 +1,5 @@
import {normalizePathTrailingSlash} from "next/dist/client/normalize-trailing-slash"
import {addBasePath} from "next/dist/shared/lib/router/router"
import {addBasePath} from "next/dist/client/add-base-path"
import {deserialize, serialize} from "superjson"
import {SuperJSONResult} from "superjson/dist/types"
import {CSRFTokenMismatchError, isServer} from "blitz"

View File

@@ -1,7 +1,6 @@
import {assert, Ctx, prettyMs} from "blitz"
import {NextApiRequest, NextApiResponse} from "next"
import {deserialize, serialize as superjsonSerialize} from "superjson"
import chalk from "chalk"
import {resolve} from "path"
// TODO - optimize end user server bundles by not exporting all client stuff here
@@ -26,7 +25,7 @@ function getGlobalObject<T extends Record<string, unknown>>(key: string, default
type Resolver = (...args: unknown[]) => Promise<unknown>
type ResolverFiles = Record<string, () => Promise<{default?: Resolver}>>
export type ResolverBasePath = "queries|mutations" | "root" | undefined
export type ResolverPathOptions = "queries|mutations" | "root" | ((path: string) => string)
// We define `global.__internal_blitzRpcResolverFiles` to ensure we use the same global object.
// Needed for Next.js. I'm guessing that Next.js is including the `node_modules/` files in a seperate bundle than user files.
@@ -51,8 +50,58 @@ export function __internal_addBlitzRpcResolver(
}
const dir = __dirname + (() => "")() // trick to avoid `@vercel/ncc` to glob import
export const loaderServer = resolve(dir, "./loader-server.cjs")
export const loaderClient = resolve(dir, "./loader-client.cjs")
const loaderClient = resolve(dir, "./loader-client.cjs")
const loaderServer = resolve(dir, "./loader-server.cjs")
const loaderServerResolvers = resolve(dir, "./loader-server-resolvers.cjs")
interface WebpackRuleOptions {
resolverPath: ResolverPathOptions | undefined
}
interface WebpackRule {
test: RegExp
use: Array<{
loader: string
options: WebpackRuleOptions
}>
}
export interface InstallWebpackConfigOptions {
webpackConfig: {
module: {
rules: WebpackRule[]
}
}
webpackRuleOptions: WebpackRuleOptions
}
export function installWebpackConfig({
webpackConfig,
webpackRuleOptions,
}: InstallWebpackConfigOptions) {
webpackConfig.module.rules.push({
test: /\/\[\[\.\.\.blitz]]\.[jt]s$/,
use: [
{
loader: loaderServer,
options: webpackRuleOptions,
},
],
})
webpackConfig.module.rules.push({
test: /[\\/](queries|mutations)[\\/]/,
use: [
{
loader: loaderClient,
options: webpackRuleOptions,
},
{
loader: loaderServerResolvers,
options: webpackRuleOptions,
},
],
})
}
// ----------
// END LOADER

View File

@@ -42,7 +42,7 @@ export async function transformBlitzRpcResolverClient(
const resolverFilePath = "/" + posix.relative(root, id)
assertPosixPath(resolverFilePath)
const routePath = convertPageFilePathToRoutePath(resolverFilePath, options?.resolverBasePath)
const routePath = convertPageFilePathToRoutePath(resolverFilePath, options?.resolverPath)
const resolverName = convertFilePathToResolverName(resolverFilePath)
const resolverType = convertFilePathToResolverType(resolverFilePath)

View File

@@ -0,0 +1,50 @@
import {describe, expect, it} from "vitest"
import {transformBlitzRpcResolverServer} from "./loader-server-resolvers"
const META_TAGS_AND_EXPORT = `
__internal_rpcHandler._resolverName = 'test'
__internal_rpcHandler._resolverType = 'query'
__internal_rpcHandler._routePath = '/api/rpc/test'
export default __internal_rpcHandler
`.trim()
describe("transformBlitzRpcResolverServer", () => {
it("should compile for function", async () => {
const result = await transformBlitzRpcResolverServer(
"export default function test() { return 'test' }",
"queries/test.js",
"/",
)
expect(result).toBe(
`const __internal_rpcHandler = function test() { return 'test' }\n\n${META_TAGS_AND_EXPORT}`,
)
})
it("should compile with resolver", async () => {
const result = await transformBlitzRpcResolverServer(
`const test = resolver.pipe(() => Promise.resolve('test'))
export default test`,
"queries/test.js",
"/",
)
expect(result).toBe(
`const test = resolver.pipe(() => Promise.resolve('test'))
const __internal_rpcHandler = test\n\n${META_TAGS_AND_EXPORT}`,
)
})
it("should compile for plain lambda", async () => {
const result = await transformBlitzRpcResolverServer(
"export default () => Promise.resolve('test')",
"queries/test.js",
"/",
)
expect(result).toBe(
`const __internal_rpcHandler = () => Promise.resolve('test')\n\n${META_TAGS_AND_EXPORT}`,
)
})
})

View File

@@ -0,0 +1,68 @@
import {
assertPosixPath,
convertFilePathToResolverName,
convertFilePathToResolverType,
convertPageFilePathToRoutePath,
Loader,
LoaderOptions,
toPosixPath,
} from "./loader-utils"
import {normalizeApiRoute} from "./data-client"
import {posix} from "path"
// Subset of `import type { LoaderDefinitionFunction } from 'webpack'`
export async function loader(this: Loader, input: string): Promise<string> {
const compiler = this._compiler!
const id = this.resource
const root = this._compiler!.context
const isSSR = compiler.name === "server"
if (isSSR) {
return await transformBlitzRpcResolverServer(
input,
toPosixPath(id),
toPosixPath(root),
this.query,
)
}
return input
}
module.exports = loader
export async function transformBlitzRpcResolverServer(
src: string,
id: string,
root: string,
options?: LoaderOptions,
) {
assertPosixPath(id)
assertPosixPath(root)
const resolverFilePath = "/" + posix.relative(root, id)
assertPosixPath(resolverFilePath)
const routePath = convertPageFilePathToRoutePath(resolverFilePath, options?.resolverPath)
const resolverName = convertFilePathToResolverName(resolverFilePath)
const resolverType = convertFilePathToResolverType(resolverFilePath)
const fullRoutePath = normalizeApiRoute("/api/rpc" + routePath)
const lines = src.split("\n")
const newLines = lines.map((line) => {
if (line.trim().startsWith("export default")) {
return line.replace("export default", "const __internal_rpcHandler =")
}
return line
})
return `${newLines.join("\n")}
__internal_rpcHandler._resolverName = '${resolverName}'
__internal_rpcHandler._resolverType = '${resolverType}'
__internal_rpcHandler._routePath = '${fullRoutePath}'
export default __internal_rpcHandler`
}

View File

@@ -55,7 +55,7 @@ export async function transformBlitzRpcServer(
for (let resolverFilePath of resolvers) {
const relativeResolverPath = posix.relative(dirname(id), join(root, resolverFilePath))
const routePath = convertPageFilePathToRoutePath(resolverFilePath, options?.resolverBasePath)
const routePath = convertPageFilePathToRoutePath(resolverFilePath, options?.resolverPath)
code += `__internal_addBlitzRpcResolver('${routePath}', () => import('${relativeResolverPath}'));`
code += "\n"
}

View File

@@ -1,9 +1,9 @@
import {assert} from "blitz"
import {posix, sep, win32} from "path"
import {ResolverBasePath} from "./index-server"
import {ResolverPathOptions} from "./index-server"
export interface LoaderOptions {
resolverBasePath?: ResolverBasePath
resolverPath: ResolverPathOptions
}
export interface Loader {
@@ -51,9 +51,13 @@ const fileExtensionRegex = /\.([a-z]+)$/
export function convertPageFilePathToRoutePath(
filePath: string,
resolverBasePath: ResolverBasePath,
resolverPath?: ResolverPathOptions,
) {
if (resolverBasePath === "root") {
if (typeof resolverPath === "function") {
return resolverPath(filePath)
}
if (resolverPath === "root") {
return filePath.replace(fileExtensionRegex, "")
}

View File

@@ -1,5 +1,51 @@
# blitz
## 2.0.0-alpha.54
### Patch Changes
- f397cc20: Fixes issue when generating a new blitz app with the form flag that ends up installing the wrong form library
- cacb65d6: Fixes wrong import of the db module in `blitz db seed` command function
- 348fd6f5: Fix redirectAuthenticatedTo errors
- 20fc9f80: Fix SSP / SP not prefetching queries correctly
- a3bbe6ce: Fix routes manifest showing duplicates for non queries|resolvers reso…
- ffa7b5cc: During `blitz new` if project name argument is set to "." change it to current folder name
- Updated dependencies [a961aff8]
- Updated dependencies [80e1ead7]
- @blitzjs/generator@2.0.0-alpha.54
## 2.0.0-alpha.53
### Patch Changes
- @blitzjs/generator@2.0.0-alpha.53
## 2.0.0-alpha.52
### Patch Changes
- Updated dependencies [12cb7a72]
- @blitzjs/generator@2.0.0-alpha.52
## 2.0.0-alpha.51
### Patch Changes
- @blitzjs/generator@2.0.0-alpha.51
## 2.0.0-alpha.50
### Patch Changes
- Updated dependencies [c11f0401]
- @blitzjs/generator@2.0.0-alpha.50
## 2.0.0-alpha.49
### Patch Changes
- @blitzjs/generator@2.0.0-alpha.49
## 2.0.0-alpha.48
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "blitz",
"version": "2.0.0-alpha.48",
"version": "2.0.0-alpha.54",
"scripts": {
"build": "unbuild",
"dev": "watch unbuild src --wait=0.2",
@@ -23,7 +23,7 @@
"blitz": "bin/blitz"
},
"dependencies": {
"@blitzjs/generator": "2.0.0-alpha.48",
"@blitzjs/generator": "2.0.0-alpha.54",
"arg": "5.0.1",
"chalk": "^4.1.0",
"console-table-printer": "2.10.0",
@@ -52,7 +52,7 @@
"watchpack": "2.1.1"
},
"devDependencies": {
"@blitzjs/config": "workspace:2.0.0-alpha.48",
"@blitzjs/config": "workspace:2.0.0-alpha.54",
"@types/cookie": "0.4.1",
"@types/cross-spawn": "6.0.2",
"@types/debug": "4.1.7",
@@ -75,7 +75,7 @@
"typescript": "^4.5.3",
"unbuild": "0.6.9",
"watch": "1.0.2",
"zod": "3.10.1"
"zod": "3.17.3"
},
"peerDependencies": {
"react": "*"

View File

@@ -1,8 +1,30 @@
import {CliCommand} from "../index"
/* @ts-ignore */
import {generateManifest} from "../utils/routes-manifest"
import resolveCwd from "resolve-cwd"
import {join} from "path"
import fs from "fs-extra"
const codegen: CliCommand = async () => {
try {
/*
Updates the user's nextjs file and adds onRecoverableError to the hydrateRoot 3rd parameter object.
We can remove this when https://github.com/vercel/next.js/pull/38207 is merged into next.js
*/
const nextDir = await resolveCwd("next")
const nextClientIndex = join(nextDir, "../..", "client", "index.js")
const readFile = await fs.readFile(nextClientIndex)
const updatedFile = readFile
.toString()
.replace(
/ReactDOM\.hydrateRoot\(.*?\);/,
`ReactDOM.hydrateRoot(domEl, reactEl, process.env.NODE_ENV === 'development' ? {onRecoverableError: (err) => err.toString().includes("could not finish this Suspense boundary") ? null : console.error(err)} : undefined);`,
)
await fs.writeFile(nextClientIndex, updatedFile)
} catch (err) {
console.log(err)
}
try {
await generateManifest()
} catch (err) {

View File

@@ -51,7 +51,7 @@ const runSeed = async (seedBasePath: string) => {
throw err
}
const db = require(dbPath).db
const db = require(dbPath)
await db.$disconnect()
console.log("Done Seeding")
}

View File

@@ -24,8 +24,13 @@ const language = {
type TLanguage = keyof typeof language
type TPkgManager = "npm" | "yarn" | "pnpm"
type TTemplate = "full" | "minimal"
const installCommandMap: Record<TPkgManager, string> = {
yarn: "yarn",
pnpm: "pnpm install",
npm: "npm install",
}
type TTemplate = "full" | "minimal"
const templates: {[key in TTemplate]: AppGeneratorOptions["template"]} = {
full: {
path: "app",
@@ -87,6 +92,10 @@ const determineProjectName = async () => {
projectPath = path.resolve(projectName)
} else {
projectName = args._.slice(1)[0] as string
if (projectName === ".") {
projectName = path.basename(process.cwd())
}
projectPath = path.resolve(projectName)
}
}
@@ -128,14 +137,7 @@ const determineFormLib = async () => {
projectFormLib = res.form
} else {
switch (args["--form"] as TForms) {
case "react-final-form":
projectFormLib = forms["react-final-form"]
case "react-hook-form":
projectFormLib = forms["react-hook-form"]
case "formik":
projectFormLib = forms["formik"]
}
projectFormLib = forms[args["--form"] as TForms]
}
}
@@ -202,11 +204,7 @@ const determinePkgManagerToInstallDeps = async () => {
projectPkgManger = res.pkgManager
if (res.pkgManager === "skip") {
shouldInstallDeps = false
} else {
shouldInstallDeps = true
}
shouldInstallDeps = res.pkgManager !== "skip"
} else {
const res = await prompts({
type: "confirm",
@@ -278,16 +276,7 @@ const newApp: CliCommand = async (argv) => {
await generator.run()
if (requireManualInstall) {
let cmd
switch (projectPkgManger) {
case "yarn":
cmd = "yarn"
case "npm":
cmd = "npm install"
case "pnpm":
cmd = "pnpm install"
}
postInstallSteps.push(cmd)
postInstallSteps.push(installCommandMap[projectPkgManger])
postInstallSteps.push(
"blitz prisma migrate dev (when asked, you can name the migration anything)",
)

View File

@@ -228,23 +228,39 @@ export function buildPageExtensionRegex(pageExtensions: string[]) {
type PagesMapping = {
[page: string]: string
}
export function convertPageFilePathToRoutePath(filePath: string, pageExtensions: string[]) {
return filePath
.replace(/^.*?[\\/]pages[\\/]/, "/")
.replace(/^.*?[\\/]api[\\/]/, "/api/")
.replace(/^.*?[\\/]queries[\\/]/, "/api/rpc/")
.replace(/^.*?[\\/]mutations[\\/]/, "/api/rpc/")
.replace(new RegExp(`\\.+(${pageExtensions.join("|")})$`), "")
function stripExtension(filePath: string, pageExtensions: string[]) {
return filePath.replace(new RegExp(`\\.+(${pageExtensions.join("|")})$`), "")
}
export function createPagesMapping(pagePaths: string[], pageExtensions: string[]) {
export function convertPageFilePathToRoutePath(filePath: string, pageExtensions: string[]) {
return stripExtension(
filePath
.replace(/^.*?[\\/]pages[\\/]/, "/")
.replace(/^.*?[\\/]api[\\/]/, "/api/")
.replace(/^.*?[\\/]queries[\\/]/, "/api/rpc/")
.replace(/^.*?[\\/]mutations[\\/]/, "/api/rpc/"),
pageExtensions,
)
}
export function createPagesMapping(pagePaths: string[], config: any) {
const {pageExtensions, blitz} = config
const resolverType = blitz?.resolverPath || "queries|mutations"
const previousPages: PagesMapping = {}
const pages = pagePaths.reduce((result: PagesMapping, pagePath): PagesMapping => {
const pages = pagePaths.reduce<PagesMapping>((result, pagePath) => {
let page = `${convertPageFilePathToRoutePath(pagePath, pageExtensions).replace(
/\\/g,
"/",
)}`.replace(/\/index$/, "")
let pageKey = page === "" ? "/" : page
const isResolver = pagePath.includes("/queries/") || pagePath.includes("/mutations/")
if (isResolver) {
if (typeof resolverType === "function") {
page = `/api/rpc${resolverType(pagePath)}`
} else if (resolverType === "root") {
page = `/api/rpc${stripExtension(pagePath, pageExtensions)}`
}
}
let pageKey = page === "" ? "/" : page
if (pageKey in result) {
console.warn(
`Duplicate page detected. ${previousPages[pageKey]} and ${pagePath} both resolve to ${pageKey}.`,
@@ -255,6 +271,7 @@ export function createPagesMapping(pagePaths: string[], pageExtensions: string[]
result[pageKey] = join(PAGES_DIR_ALIAS, pagePath).replace(/\\/g, "/")
return result
}, {})
pages["/_app"] = pages["/_app"] || "next/dist/pages/_app"
pages["/_error"] = pages["/_error"] || "next/dist/pages/_error"
pages["/_document"] = pages["/_document"] || "next/dist/pages/_document"
@@ -277,7 +294,7 @@ function getVerb(type: string) {
const apiPathRegex = /([\\/]api[\\/])/
export async function collectAllRoutes(directory: string, config: any) {
const routeFiles = await collectPages(directory, config.pageExtensions!)
const rawRouteMappings = createPagesMapping(routeFiles, config.pageExtensions!)
const rawRouteMappings = createPagesMapping(routeFiles, config)
const routes = []
for (const [route, filePath] of Object.entries(rawRouteMappings)) {
if (["/_app", "/_document", "/_error"].includes(route)) continue
@@ -515,15 +532,6 @@ export const isInternalBlitzMonorepoDevelopment = __dirname.match(
)
async function findNodeModulesRoot(src: string) {
/*
* Because of our package structure, and because of how things like pnpm link modules,
* we must first find blitz package, and then find `next` and then
* the root of `next`
*
* This is because we import from `.blitz` inside `next/stdlib`.
* If that changes, then this logic here will need to change
*/
let root: string
if (isInternalBlitzMonorepoDevelopment) {
root = join(__dirname, "..", "..", "..", "..", "/node_modules")

View File

@@ -78,7 +78,7 @@ describe("formatZodError", () => {
})
expect(formatZodError(result.error)).toEqual({
students: [undefined, {name: "Required"}, {name: "Expected string, received boolean"}],
data: [undefined, "Expected true, received undefined"],
data: [undefined, "Invalid literal value, expected true"],
})
})
})

View File

@@ -1,5 +1,58 @@
# @blitzjs/codemod
## 2.0.0-alpha.54
### Patch Changes
- Updated dependencies [f397cc20]
- Updated dependencies [cacb65d6]
- Updated dependencies [348fd6f5]
- Updated dependencies [20fc9f80]
- Updated dependencies [a961aff8]
- Updated dependencies [80e1ead7]
- Updated dependencies [a3bbe6ce]
- Updated dependencies [ffa7b5cc]
- blitz@2.0.0-alpha.54
- @blitzjs/generator@2.0.0-alpha.54
## 2.0.0-alpha.53
### Patch Changes
- @blitzjs/generator@2.0.0-alpha.53
- blitz@2.0.0-alpha.53
## 2.0.0-alpha.52
### Patch Changes
- Updated dependencies [12cb7a72]
- @blitzjs/generator@2.0.0-alpha.52
- blitz@2.0.0-alpha.52
## 2.0.0-alpha.51
### Patch Changes
- 70f9ae49: Handle next/dynamic default import in codemod
- @blitzjs/generator@2.0.0-alpha.51
- blitz@2.0.0-alpha.51
## 2.0.0-alpha.50
### Patch Changes
- Updated dependencies [c11f0401]
- @blitzjs/generator@2.0.0-alpha.50
- blitz@2.0.0-alpha.50
## 2.0.0-alpha.49
### Patch Changes
- @blitzjs/generator@2.0.0-alpha.49
- blitz@2.0.0-alpha.49
## 2.0.0-alpha.48
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@blitzjs/codemod",
"version": "2.0.0-alpha.48",
"version": "2.0.0-alpha.54",
"scripts": {
"build": "unbuild",
"dev": "watch unbuild src --wait=0.2",
@@ -25,9 +25,9 @@
"@babel/plugin-proposal-class-properties": "7.17.12",
"@babel/plugin-syntax-jsx": "7.17.12",
"@babel/plugin-syntax-typescript": "7.17.12",
"@blitzjs/generator": "2.0.0-alpha.48",
"@blitzjs/generator": "2.0.0-alpha.54",
"arg": "5.0.1",
"blitz": "2.0.0-alpha.48",
"blitz": "2.0.0-alpha.54",
"chalk": "^4.1.0",
"cross-spawn": "7.0.3",
"debug": "4.3.3",

View File

@@ -85,8 +85,8 @@ const upgradeLegacy = async () => {
packageJsonPath.dependencies["react"] = "latest"
packageJsonPath.dependencies["react-dom"] = "latest"
packageJsonPath.dependencies["@blitzjs/next"] = "alpha"
packageJsonPath.dependencies["@blitzjs/rpc"] = "latest"
packageJsonPath.dependencies["@blitzjs/auth"] = "latest"
packageJsonPath.dependencies["@blitzjs/rpc"] = "alpha"
packageJsonPath.dependencies["@blitzjs/auth"] = "alpha"
packageJsonPath.dependencies["blitz"] = "alpha"
packageJsonPath.dependencies["next"] = "latest"
packageJsonPath.dependencies["prisma"] = "latest"
@@ -223,6 +223,7 @@ const upgradeLegacy = async () => {
const nextImage = findImport(program, "next/image")
const nextLink = findImport(program, "next/link")
const nextHead = findImport(program, "next/head")
const dynamic = findImport(program, "next/dynamic")
if (nextImage?.length) {
nextImage.remove()
@@ -260,6 +261,18 @@ const upgradeLegacy = async () => {
)
}
if (dynamic?.length) {
dynamic.remove()
program
.get()
.value.program.body.unshift(
j.importDeclaration(
[j.importDefaultSpecifier(j.identifier("dynamic"))],
j.stringLiteral("next/dynamic"),
),
)
}
fs.writeFileSync(path.join(path.resolve(file)), program.toSource())
})
},
@@ -331,7 +344,6 @@ const upgradeLegacy = async () => {
(file) => {
const program = getCollectionFromSource(file)
// BlitzApiHandler -> NextApiHandler
replaceImport(program, "blitz", "BlitzApiHandler", "next", "NextApiHandler")
replaceIdentifiers(program, "BlitzApiHandler", "NextApiHandler")

View File

@@ -1,5 +1,17 @@
# @blitzjs/config
## 2.0.0-alpha.54
## 2.0.0-alpha.53
## 2.0.0-alpha.52
## 2.0.0-alpha.51
## 2.0.0-alpha.50
## 2.0.0-alpha.49
## 2.0.0-alpha.48
## 2.0.0-alpha.47

View File

@@ -1,13 +1,13 @@
{
"name": "@blitzjs/config",
"private": true,
"version": "2.0.0-alpha.48",
"version": "2.0.0-alpha.54",
"license": "MIT",
"dependencies": {
"@typescript-eslint/eslint-plugin": "5.9.1",
"@typescript-eslint/parser": "5.9.1",
"eslint-config-next": "12.0.7",
"eslint-config-prettier": "8.3.0"
"eslint-config-next": "12.2.0",
"eslint-config-prettier": "8.5.0"
},
"devDependencies": {
"typescript": "^4.5.3"

View File

@@ -1,5 +1,30 @@
# @blitzjs/generator
## 2.0.0-alpha.54
### Patch Changes
- a961aff8: Add missing lint deps to the new app templates
- 80e1ead7: Add jest.config.js to newly generated typescript apps
## 2.0.0-alpha.53
## 2.0.0-alpha.52
### Patch Changes
- 12cb7a72: Upgrade Prisma to v4.0.0
## 2.0.0-alpha.51
## 2.0.0-alpha.50
### Patch Changes
- c11f0401: Update Next.js version and addBasePath location
## 2.0.0-alpha.49
## 2.0.0-alpha.48
## 2.0.0-alpha.47

View File

@@ -1,6 +1,6 @@
{
"name": "@blitzjs/generator",
"version": "2.0.0-alpha.48",
"version": "2.0.0-alpha.54",
"scripts": {
"dev": "watch unbuild src --wait=0.2",
"build": "unbuild && pnpm build:templates",
@@ -45,7 +45,7 @@
"vinyl": "2.2.1"
},
"devDependencies": {
"@blitzjs/config": "2.0.0-alpha.48",
"@blitzjs/config": "2.0.0-alpha.54",
"@juanm04/cpx": "2.0.1",
"@types/babel__core": "7.1.19",
"@types/diff": "5.0.2",

View File

@@ -49,7 +49,7 @@ export class AppGenerator extends Generator<AppGeneratorOptions> {
"types.ts",
]
}
return ["jsconfig.json", "jest.config.js", "package.js.json", "pre-push-js"]
return ["jsconfig.json", "package.js.json", "pre-push-js"]
}
async getTemplateValues() {

View File

@@ -1,5 +1,3 @@
TODO
[![Blitz.js](https://raw.githubusercontent.com/blitz-js/art/master/github-cover-photo.png)](https://blitzjs.com)
This is a [Blitz.js](https://github.com/blitz-js/blitz) app.

View File

@@ -22,16 +22,16 @@
"*.{js}": ["eslint --fix"]
},
"dependencies": {
"@blitzjs/auth": "latest",
"@blitzjs/auth": "alpha",
"@blitzjs/next": "alpha",
"@blitzjs/rpc": "latest",
"@blitzjs/rpc": "alpha",
"@prisma/client": "3.9.0",
"blitz": "alpha",
"next": "12.1.6",
"prisma": "3.9.0",
"next": "12.2.0",
"prisma": "4.0.0",
"react": "18.0.0",
"react-dom": "18.0.0",
"zod": "3.10.1"
"zod": "3.17.3"
},
"devDependencies": {
"@next/bundle-analyzer": "12.0.8",
@@ -40,6 +40,8 @@
"@types/preview-email": "2.0.1",
"@types/react": "18.0.1",
"eslint": "7.32.0",
"eslint-config-next": "12.2.0",
"eslint-config-prettier": "8.5.0",
"husky": "7.0.4",
"jest": "27.5.1",
"lint-staged": "12.1.7",

View File

@@ -22,16 +22,16 @@
"*.{js,ts,tsx}": ["eslint --fix"]
},
"dependencies": {
"@blitzjs/auth": "latest",
"@blitzjs/auth": "alpha",
"@blitzjs/next": "alpha",
"@blitzjs/rpc": "latest",
"@blitzjs/rpc": "alpha",
"@prisma/client": "3.9.0",
"blitz": "alpha",
"next": "12.1.6",
"prisma": "3.9.0",
"next": "12.2.0",
"prisma": "4.0.0",
"react": "18.0.0",
"react-dom": "18.0.0",
"zod": "3.10.1"
"zod": "3.17.3"
},
"devDependencies": {
"@next/bundle-analyzer": "12.0.8",
@@ -39,7 +39,10 @@
"@types/node": "17.0.16",
"@types/preview-email": "2.0.1",
"@types/react": "18.0.1",
"@typescript-eslint/eslint-plugin": "5.30.5",
"eslint": "7.32.0",
"eslint-config-next": "12.2.0",
"eslint-config-prettier": "8.5.0",
"husky": "7.0.4",
"jest": "27.5.1",
"lint-staged": "12.1.7",

View File

@@ -20,7 +20,7 @@
"dependencies": {
"@blitzjs/next": "alpha",
"blitz": "alpha",
"next": "12.1.6",
"next": "12.2.0",
"react": "18.0.0",
"react-dom": "18.0.0",
"ts-node": "10.7.0"
@@ -31,6 +31,8 @@
"@types/node": "17.0.16",
"@types/react": "18.0.1",
"eslint": "7.32.0",
"eslint-config-next": "12.2.0",
"eslint-config-prettier": "8.5.0",
"husky": "7.0.4",
"jest": "27.5.1",
"lint-staged": "12.1.7",

View File

@@ -22,7 +22,7 @@
"dependencies": {
"@blitzjs/next": "alpha",
"blitz": "alpha",
"next": "12.1.6",
"next": "12.2.0",
"react": "18.0.0",
"react-dom": "18.0.0",
"ts-node": "10.7.0"
@@ -32,7 +32,10 @@
"@types/jest": "27.4.1",
"@types/node": "17.0.16",
"@types/react": "18.0.1",
"@typescript-eslint/eslint-plugin": "5.30.5",
"eslint": "7.32.0",
"eslint-config-prettier": "8.5.0",
"eslint-config-next": "12.2.0",
"husky": "7.0.4",
"jest": "27.5.1",
"lint-staged": "12.1.7",

View File

@@ -25,7 +25,7 @@
"@typescript-eslint/parser": "5.9.1"
},
"devDependencies": {
"@blitzjs/config": "2.0.0-alpha.48",
"@blitzjs/config": "2.0.0-alpha.54",
"@types/react": "18.0.1",
"@types/react-dom": "17.0.14",
"react": "18.0.0",

29
patches/next@12.2.0.patch Normal file
View File

@@ -0,0 +1,29 @@
diff --git a/dist/build/webpack-config.js b/dist/build/webpack-config.js
index f9cab03b74411376898fbf5bd14c187236d9ad1b..f91706ec39cc53d642e477ecc10978b17d2b8bb4 100755
--- a/dist/build/webpack-config.js
+++ b/dist/build/webpack-config.js
@@ -910,6 +910,7 @@ async function getBaseWebpackConfig(dir, { buildId , config , compilerType , dev
"process.env.__NEXT_I18N_SUPPORT": JSON.stringify(!!config.i18n),
"process.env.__NEXT_I18N_DOMAINS": JSON.stringify((ref9 = config.i18n) == null ? void 0 : ref9.domains),
"process.env.__NEXT_ANALYTICS_ID": JSON.stringify(config.analyticsId),
+ 'process.env.__NEXT_REACT_ONRECOVERABLE_ERROR': config.reactOnRecoverableError,
...isNodeServer || isEdgeServer ? {
// Fix bad-actors in the npm ecosystem (e.g. `node-formidable`)
// This is typically found in unmaintained modules from the
diff --git a/dist/client/index.js b/dist/client/index.js
index 74242a1991af91cc44c2d4af3516f9225043f987..ed2f298d65a636fa79b3d580ad6e3aa0792efcfd 100755
--- a/dist/client/index.js
+++ b/dist/client/index.js
@@ -475,7 +475,11 @@ function renderReactElement(domEl, fn) {
if (process.env.__NEXT_REACT_ROOT) {
if (!reactRoot) {
// Unlike with createRoot, you don't need a separate root.render() call here
- reactRoot = ReactDOM.hydrateRoot(domEl, reactEl);
+ reactRoot = ReactDOM.hydrateRoot(domEl, reactEl, Boolean(process.env.__NEXT_REACT_ONRECOVERABLE_ERROR)
+ ? {
+ onRecoverableError: process.env.__NEXT_REACT_ONRECOVERABLE_ERROR,
+ }
+ : undefined);
// TODO: Remove shouldHydrate variable when React 18 is stable as it can depend on `reactRoot` existing
shouldHydrate = false;
} else {

563
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff