Compare commits
4 Commits
@blitzjs/c
...
feature/pa
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
946db95245 | ||
|
|
15b95d3fd7 | ||
|
|
a72897bcfe | ||
|
|
c3f79cea23 |
@@ -240,8 +240,7 @@ export function withBlitz(nextConfig: BlitzConfig = {}) {
|
||||
},
|
||||
})
|
||||
|
||||
const {blitz, ...rest} = config
|
||||
return rest
|
||||
return config
|
||||
}
|
||||
|
||||
export type PrefetchQueryFn = <T extends AsyncFunc, TInput = FirstParam<T>>(
|
||||
|
||||
@@ -47,6 +47,7 @@
|
||||
"prompts": "2.4.2",
|
||||
"resolve-cwd": "3.0.0",
|
||||
"resolve-from": "5.0.0",
|
||||
"semver": "7.3.7",
|
||||
"superjson": "1.8.0",
|
||||
"supports-color": "8.1.1",
|
||||
"ts-node": "10.7.0",
|
||||
|
||||
@@ -1,54 +0,0 @@
|
||||
import {generateManifest} from "./routes-manifest"
|
||||
import {log} from "../../logging"
|
||||
import resolveCwd from "resolve-cwd"
|
||||
import {join} from "path"
|
||||
import fs from "fs-extra"
|
||||
import {getPackageJson} from "./get-package-json"
|
||||
import {runPrisma} from "../../utils/run-prisma"
|
||||
|
||||
export const codegenTasks = 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)
|
||||
log.success("Next.js was successfully patched with a React Suspense fix")
|
||||
} catch (err) {
|
||||
log.error(JSON.stringify(err, null, 2))
|
||||
}
|
||||
|
||||
try {
|
||||
await generateManifest()
|
||||
log.success("Routes manifest was successfully generated")
|
||||
|
||||
const {dependencies, devDependencies} = await getPackageJson()
|
||||
|
||||
const hasPrisma = Object.keys({...dependencies, ...devDependencies}).some(
|
||||
(name) => name === "prisma",
|
||||
)
|
||||
|
||||
if (hasPrisma) {
|
||||
let prismaSpinner = log.spinner(`Generating Prisma client`).start()
|
||||
const result = await runPrisma(["generate"], true)
|
||||
if (result.success) {
|
||||
prismaSpinner.succeed(log.greenText("Generated Prisma client"))
|
||||
} else {
|
||||
prismaSpinner.fail()
|
||||
console.log("\n" + result.stderr)
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
log.error(JSON.stringify(err, null, 2))
|
||||
}
|
||||
}
|
||||
22
packages/blitz/src/cli/utils/codegen-tasks/generatePrisma.ts
Normal file
22
packages/blitz/src/cli/utils/codegen-tasks/generatePrisma.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
import {log} from "../../../logging"
|
||||
import {runPrisma} from "../../../utils/run-prisma"
|
||||
import {getPackageJson} from "../get-package-json"
|
||||
|
||||
export const generatePrismaClient = async () => {
|
||||
const {dependencies, devDependencies} = await getPackageJson()
|
||||
const hasPrisma = Object.keys({...dependencies, ...devDependencies}).some(
|
||||
(name) => name === "prisma",
|
||||
)
|
||||
|
||||
if (hasPrisma) {
|
||||
let prismaSpinner = log.spinner(`Generating Prisma client`).start()
|
||||
const result = await runPrisma(["generate"], true)
|
||||
if (result.success) {
|
||||
prismaSpinner.succeed(log.greenText("Generated Prisma client"))
|
||||
} else {
|
||||
prismaSpinner.fail()
|
||||
console.log("\n" + result.stderr)
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
}
|
||||
25
packages/blitz/src/cli/utils/codegen-tasks/index.ts
Normal file
25
packages/blitz/src/cli/utils/codegen-tasks/index.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
import {generateManifest} from "../routes-manifest"
|
||||
import {log} from "../../../logging"
|
||||
|
||||
import {generatePrismaClient} from "./generatePrisma"
|
||||
import {patchNextSuspenseBug, patchNextConfigWarning} from "./patchNextJs"
|
||||
|
||||
const _tryCatch = async (fn: () => Promise<unknown>) => {
|
||||
try {
|
||||
await fn()
|
||||
} catch (err) {
|
||||
log.error(JSON.stringify(err, null, 2))
|
||||
}
|
||||
}
|
||||
|
||||
export const codegenTasks = async () => {
|
||||
await _tryCatch(patchNextSuspenseBug)
|
||||
await _tryCatch(patchNextConfigWarning)
|
||||
|
||||
await _tryCatch(async () => {
|
||||
await generateManifest()
|
||||
log.success("Routes manifest was successfully generated")
|
||||
})
|
||||
|
||||
await _tryCatch(generatePrismaClient)
|
||||
}
|
||||
63
packages/blitz/src/cli/utils/codegen-tasks/patchNextJs.ts
Normal file
63
packages/blitz/src/cli/utils/codegen-tasks/patchNextJs.ts
Normal file
@@ -0,0 +1,63 @@
|
||||
import {join} from "path"
|
||||
import semver from "semver"
|
||||
import resolveCwd from "resolve-cwd"
|
||||
import fs from "fs-extra"
|
||||
|
||||
import {log} from "../../../logging"
|
||||
import {getPackageJson} from "../get-package-json"
|
||||
|
||||
const modifyNextFile = async (
|
||||
path: string,
|
||||
replacer: (str: string) => string,
|
||||
semverCheck?: (version: string) => boolean,
|
||||
) => {
|
||||
const nextDir = resolveCwd("next")
|
||||
if (semverCheck) {
|
||||
const pkgJson = await getPackageJson(nextDir)
|
||||
if (!semverCheck(pkgJson.version)) {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
const nextClientIndex = join(nextDir, path)
|
||||
const readFile = await fs.readFile(nextClientIndex)
|
||||
const updatedFile = replacer(readFile.toString())
|
||||
|
||||
await fs.writeFile(nextClientIndex, updatedFile)
|
||||
}
|
||||
|
||||
export const patchNextSuspenseBug = async () => {
|
||||
/*
|
||||
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
|
||||
*/
|
||||
|
||||
await modifyNextFile("../../client/index.js", (str) => {
|
||||
return str.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);`,
|
||||
)
|
||||
})
|
||||
|
||||
log.success("Next.js was successfully patched with a React Suspense fix")
|
||||
}
|
||||
|
||||
export const patchNextConfigWarning = async () => {
|
||||
/*
|
||||
Updates the user's nextjs config validation to add blitz as a valid prop in the config schema
|
||||
We can remove this when https://github.com/vercel/next.js/issues/39606 issue gets resolved
|
||||
*/
|
||||
|
||||
await modifyNextFile(
|
||||
"../../client/index.js",
|
||||
(str) => {
|
||||
return str.replace(
|
||||
/type:"object",additionalProperties:false,properties:{amp:{/,
|
||||
`type:"object",additionalProperties:false,properties:{blitz:{type:"any"},amp:{`,
|
||||
)
|
||||
},
|
||||
(version) => semver.gte(version, "12.2.3"),
|
||||
)
|
||||
|
||||
log.success("Next.js was successfully patched with config warning fix")
|
||||
}
|
||||
@@ -2,8 +2,8 @@ import {existsSync} from "fs"
|
||||
import {readJSON} from "fs-extra"
|
||||
import {join} from "path"
|
||||
|
||||
export const getPackageJson = async () => {
|
||||
const pkgJsonPath = join(process.cwd(), "package.json")
|
||||
export const getPackageJson = async (path = process.cwd()) => {
|
||||
const pkgJsonPath = join(path, "package.json")
|
||||
if (existsSync(pkgJsonPath)) {
|
||||
return readJSON(pkgJsonPath)
|
||||
}
|
||||
|
||||
36
pnpm-lock.yaml
generated
36
pnpm-lock.yaml
generated
@@ -49,7 +49,7 @@ importers:
|
||||
"@types/preview-email": 2.0.1
|
||||
"@types/react": 18.0.1
|
||||
"@typescript-eslint/eslint-plugin": 5.9.1
|
||||
blitz: workspace:2.0.0-beta.0
|
||||
blitz: workspace:2.0.0-beta.1
|
||||
eslint: 7.32.0
|
||||
eslint-config-next: 12.2.0
|
||||
eslint-config-prettier: 8.5.0
|
||||
@@ -524,8 +524,8 @@ importers:
|
||||
|
||||
packages/blitz:
|
||||
specifiers:
|
||||
"@blitzjs/config": workspace:2.0.0-beta.0
|
||||
"@blitzjs/generator": 2.0.0-beta.0
|
||||
"@blitzjs/config": workspace:2.0.0-beta.1
|
||||
"@blitzjs/generator": 2.0.0-beta.1
|
||||
"@types/cookie": 0.4.1
|
||||
"@types/cross-spawn": 6.0.2
|
||||
"@types/debug": 4.1.7
|
||||
@@ -566,6 +566,7 @@ importers:
|
||||
react: 18.0.0
|
||||
resolve-cwd: 3.0.0
|
||||
resolve-from: 5.0.0
|
||||
semver: 7.3.7
|
||||
superjson: 1.8.0
|
||||
supports-color: 8.1.1
|
||||
test-listen: 1.1.0
|
||||
@@ -602,6 +603,7 @@ importers:
|
||||
prompts: 2.4.2
|
||||
resolve-cwd: 3.0.0
|
||||
resolve-from: 5.0.0
|
||||
semver: 7.3.7
|
||||
superjson: 1.8.0_supports-color@8.1.1
|
||||
supports-color: 8.1.1
|
||||
ts-node: 10.7.0_typescript@4.6.3
|
||||
@@ -635,7 +637,7 @@ importers:
|
||||
|
||||
packages/blitz-auth:
|
||||
specifiers:
|
||||
"@blitzjs/config": workspace:2.0.0-beta.0
|
||||
"@blitzjs/config": workspace:2.0.0-beta.1
|
||||
"@testing-library/react": 13.0.0
|
||||
"@testing-library/react-hooks": 7.0.2
|
||||
"@types/b64-lite": 1.3.0
|
||||
@@ -649,7 +651,7 @@ importers:
|
||||
"@types/secure-password": 3.1.1
|
||||
b64-lite: 1.4.0
|
||||
bad-behavior: 1.0.1
|
||||
blitz: 2.0.0-beta.0
|
||||
blitz: 2.0.0-beta.1
|
||||
cookie: 0.4.1
|
||||
cookie-session: 2.0.0
|
||||
debug: 4.3.3
|
||||
@@ -702,8 +704,8 @@ importers:
|
||||
|
||||
packages/blitz-next:
|
||||
specifiers:
|
||||
"@blitzjs/config": workspace:2.0.0-beta.0
|
||||
"@blitzjs/rpc": 2.0.0-beta.0
|
||||
"@blitzjs/config": workspace:2.0.0-beta.1
|
||||
"@blitzjs/rpc": 2.0.0-beta.1
|
||||
"@tanstack/react-query": 4.0.10
|
||||
"@testing-library/dom": 8.13.0
|
||||
"@testing-library/jest-dom": 5.16.3
|
||||
@@ -715,7 +717,7 @@ importers:
|
||||
"@types/react": 18.0.1
|
||||
"@types/react-dom": 17.0.14
|
||||
"@types/testing-library__react-hooks": 4.0.0
|
||||
blitz: 2.0.0-beta.0
|
||||
blitz: 2.0.0-beta.1
|
||||
cross-spawn: 7.0.3
|
||||
debug: 4.3.3
|
||||
find-up: 4.1.0
|
||||
@@ -765,15 +767,15 @@ importers:
|
||||
|
||||
packages/blitz-rpc:
|
||||
specifiers:
|
||||
"@blitzjs/auth": 2.0.0-beta.0
|
||||
"@blitzjs/config": workspace:2.0.0-beta.0
|
||||
"@blitzjs/auth": 2.0.0-beta.1
|
||||
"@blitzjs/config": workspace:2.0.0-beta.1
|
||||
"@tanstack/react-query": 4.0.10
|
||||
"@types/debug": 4.1.7
|
||||
"@types/react": 18.0.1
|
||||
"@types/react-dom": 17.0.14
|
||||
b64-lite: 1.4.0
|
||||
bad-behavior: 1.0.1
|
||||
blitz: 2.0.0-beta.0
|
||||
blitz: 2.0.0-beta.1
|
||||
chalk: ^4.1.0
|
||||
debug: 4.3.3
|
||||
next: 12.2.0
|
||||
@@ -816,12 +818,12 @@ importers:
|
||||
"@babel/plugin-syntax-typescript": 7.17.12
|
||||
"@babel/preset-env": 7.12.10
|
||||
"@blitzjs/config": workspace:*
|
||||
"@blitzjs/generator": 2.0.0-beta.0
|
||||
"@blitzjs/generator": 2.0.0-beta.1
|
||||
"@types/jscodeshift": 0.11.2
|
||||
"@types/node": 17.0.16
|
||||
arg: 5.0.1
|
||||
ast-types: 0.14.2
|
||||
blitz: 2.0.0-beta.0
|
||||
blitz: 2.0.0-beta.1
|
||||
chalk: ^4.1.0
|
||||
cross-spawn: 7.0.3
|
||||
debug: 4.3.3
|
||||
@@ -876,7 +878,7 @@ importers:
|
||||
"@babel/plugin-transform-typescript": 7.12.1
|
||||
"@babel/preset-env": 7.12.10
|
||||
"@babel/types": 7.12.10
|
||||
"@blitzjs/config": 2.0.0-beta.0
|
||||
"@blitzjs/config": 2.0.0-beta.1
|
||||
"@juanm04/cpx": 2.0.1
|
||||
"@mrleebo/prisma-ast": 0.2.6
|
||||
"@types/babel__core": 7.1.19
|
||||
@@ -969,7 +971,7 @@ importers:
|
||||
|
||||
packages/pkg-template:
|
||||
specifiers:
|
||||
"@blitzjs/config": 2.0.0-beta.0
|
||||
"@blitzjs/config": 2.0.0-beta.1
|
||||
"@types/react": 18.0.1
|
||||
"@types/react-dom": 17.0.14
|
||||
"@typescript-eslint/eslint-plugin": 5.9.1
|
||||
@@ -12070,7 +12072,7 @@ packages:
|
||||
pretty-format: 27.5.1
|
||||
slash: 3.0.0
|
||||
strip-json-comments: 3.1.1
|
||||
ts-node: 10.7.0_fxg3r7oju3tntkxsvleuiot4fa
|
||||
ts-node: 10.7.0_typescript@4.6.3
|
||||
transitivePeerDependencies:
|
||||
- bufferutil
|
||||
- canvas
|
||||
@@ -17356,6 +17358,7 @@ packages:
|
||||
typescript: 4.6.3
|
||||
v8-compile-cache-lib: 3.0.1
|
||||
yn: 3.1.1
|
||||
dev: false
|
||||
|
||||
/ts-node/10.7.0_typescript@4.6.3:
|
||||
resolution:
|
||||
@@ -17388,7 +17391,6 @@ packages:
|
||||
typescript: 4.6.3
|
||||
v8-compile-cache-lib: 3.0.1
|
||||
yn: 3.1.1
|
||||
dev: false
|
||||
|
||||
/tsconfig-paths/3.14.1:
|
||||
resolution:
|
||||
|
||||
Reference in New Issue
Block a user