1
0
mirror of synced 2026-02-04 12:08:33 -05:00

Compare commits

...

7 Commits

Author SHA1 Message Date
github-actions[bot]
72addbbeed Version Packages (alpha) (#3540)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-07-18 11:29:22 +02:00
Fran Zekan
1c809094fd Fix Page.authenticate not working for layout components (#3547)
Co-authored-by: Aleksandra <alexsandra.sikora@gmail.com>
2022-07-18 10:39:07 +02:00
Fran Zekan
54a66a95dc Show all blitz packages when running blitz version command (#3553)
Co-authored-by: beerose <alexsandra.sikora@gmail.com>
2022-07-18 10:03:44 +02:00
Fran Zekan
8d9ea00e1d Fix prefetching multiple queries causes only the last one to be passed to page (#3551) 2022-07-17 19:28:45 +02:00
Fran Zekan
ab4d9de70f Don't try to copy RPC API endpoint in templates that don't have it (#3545)
* Don't try to copy RPC API endpoint in templates that don't have it
2022-07-17 18:08:08 +02:00
Fran Zekan
8f166a5db0 Check for new versions when running CLI (#3465)
* Simple function to call new on every cli invocation to update blitz

* Fix printing of how to

* Catch network errors

* Cleanup

* Loop through all locally installed and packages and check if an update is needed

* cache checkForLatestVersion so it runs only on every 24 hours

* make update message pretty

* uncomment shouldUpdate boolean

* run checkLatestVersion on dev command and new

* Dont run in our monorepo + small changes

* Create curly-seas-serve.md

Co-authored-by: Dillon Raphael <dillon@creatorsneverdie.com>
2022-07-17 01:01:52 +02:00
Datner
df7cee84ad fix(blitz-rpc): fix 6th pipe resolver not returning resolved value (#3537)
Co-authored-by: beerose <alexsandra.sikora@gmail.com>
2022-07-15 12:18:00 +02:00
39 changed files with 555 additions and 118 deletions

View File

@@ -0,0 +1,5 @@
---
"blitz": patch
---
Check for new versions when running CLI

View File

@@ -0,0 +1,5 @@
---
"blitz": patch
---
Show all blitz packages when running `blitz version` command

View File

@@ -0,0 +1,5 @@
---
"@blitzjs/generator": patch
---
Don't try to copy RPC API endpoint in templates that don't have it

View File

@@ -0,0 +1,5 @@
---
"@blitzjs/rpc": patch
---
Fix pipe resolver return type

View File

@@ -26,6 +26,7 @@
"bright-mangos-run",
"cool-doors-invent",
"cool-horses-check",
"curly-seas-serve",
"dirty-monkeys-greet",
"eleven-humans-sort",
"empty-berries-rule",
@@ -43,9 +44,11 @@
"great-months-train",
"green-papayas-do",
"healthy-rice-shout",
"heavy-apes-judge",
"hot-drinks-approve",
"late-steaks-give",
"lemon-games-press",
"lemon-seas-push",
"lovely-colts-share",
"lucky-cows-try",
"modern-cameras-pull",
@@ -62,6 +65,7 @@
"olive-bees-buy",
"olive-feet-rhyme",
"olive-sheep-rhyme",
"perfect-eyes-repeat",
"plenty-bottles-swim",
"poor-peas-lick",
"poor-penguins-look",
@@ -80,6 +84,7 @@
"slow-walls-poke",
"small-socks-confess",
"smooth-planets-admire",
"soft-adults-smell",
"strong-apes-reply",
"stupid-walls-sell",
"swift-drinks-dress",
@@ -92,6 +97,7 @@
"thick-parrots-float",
"thirty-countries-build",
"tidy-clouds-smoke",
"twelve-lemons-smile",
"twenty-beans-pump",
"two-carpets-rhyme",
"two-kiwis-help",

View File

@@ -0,0 +1,5 @@
---
"@blitzjs/auth": patch
---
Fix `Page.authenticate` not working for layout components

View File

@@ -0,0 +1,5 @@
---
"@blitzjs/next": patch
---
Fix prefetching multiple queries causes only the last one to be passed to page

2
.npmrc
View File

@@ -6,4 +6,4 @@ public-hoist-pattern[]=*types*
public-hoist-pattern[]=*eslint*
public-hoist-pattern[]=@prettier/plugin-*
public-hoist-pattern[]=*prettier-plugin-*
strict-peer-dependencies=false

View File

@@ -1,7 +1,11 @@
import React from "react"
import Head from "next/head"
import React, { FC } from "react"
import { BlitzLayout } from "@blitzjs/next"
const Layout: FC<{ title?: string; children?: React.ReactNode }> = ({ title, children }) => {
const Layout: BlitzLayout<{ title?: string; children?: React.ReactNode }> = ({
title,
children,
}) => {
return (
<>
<Head>

View File

@@ -29,7 +29,7 @@
"@blitzjs/rpc": "workspace:*",
"@hookform/resolvers": "2.8.8",
"@prisma/client": "3.9.0",
"blitz": "workspace:2.0.0-alpha.54",
"blitz": "workspace:2.0.0-alpha.55",
"next": "12.2.0",
"prisma": "4.0.0",
"react": "18.0.0",

View File

@@ -1,5 +1,14 @@
# @blitzjs/auth
## 2.0.0-alpha.55
### Patch Changes
- 1c809094: Fix `Page.authenticate` not working for layout components
- Updated dependencies [8f166a5d]
- Updated dependencies [54a66a95]
- blitz@2.0.0-alpha.55
## 2.0.0-alpha.54
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@blitzjs/auth",
"version": "2.0.0-alpha.54",
"version": "2.0.0-alpha.55",
"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.54",
"blitz": "2.0.0-alpha.55",
"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.54",
"@blitzjs/config": "workspace:2.0.0-alpha.55",
"@testing-library/react": "13.0.0",
"@testing-library/react-hooks": "7.0.2",
"@types/cookie": "0.4.1",

View File

@@ -216,8 +216,8 @@ export function getAuthValues<TProps = any>(
) {
if (!Page) return {}
let authenticate = "authenticate" in Page && Page.authenticate
let redirectAuthenticatedTo = "redirectAuthenticatedTo" in Page && Page.redirectAuthenticatedTo
let authenticate = (Page as BlitzPage)?.authenticate
let redirectAuthenticatedTo = (Page as BlitzPage)?.redirectAuthenticatedTo
if (authenticate === undefined && redirectAuthenticatedTo === undefined) {
const layout = "getLayout" in Page && Page.getLayout?.(<Page {...props} />)

View File

@@ -1,5 +1,13 @@
# @blitzjs/next
## 2.0.0-alpha.55
### Patch Changes
- 8d9ea00e: Fix prefetching multiple queries causes only the last one to be passed to page
- Updated dependencies [df7cee84]
- @blitzjs/rpc@2.0.0-alpha.55
## 2.0.0-alpha.54
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@blitzjs/next",
"version": "2.0.0-alpha.54",
"version": "2.0.0-alpha.55",
"scripts": {
"build": "unbuild",
"dev": "pnpm predev && pnpm watch unbuild src --wait=0.2",
@@ -24,7 +24,7 @@
"eslint.js"
],
"dependencies": {
"@blitzjs/rpc": "2.0.0-alpha.54",
"@blitzjs/rpc": "2.0.0-alpha.55",
"@types/hoist-non-react-statics": "3.3.1",
"debug": "4.3.3",
"fs-extra": "10.0.1",
@@ -33,7 +33,7 @@
"superjson": "1.8.0"
},
"devDependencies": {
"@blitzjs/config": "workspace:2.0.0-alpha.54",
"@blitzjs/config": "workspace:2.0.0-alpha.55",
"@testing-library/dom": "8.13.0",
"@testing-library/jest-dom": "5.16.3",
"@testing-library/react": "13.0.0",
@@ -43,7 +43,7 @@
"@types/react": "18.0.1",
"@types/react-dom": "17.0.14",
"@types/testing-library__react-hooks": "4.0.0",
"blitz": "2.0.0-alpha.54",
"blitz": "2.0.0-alpha.55",
"cross-spawn": "7.0.3",
"find-up": "4.1.0",
"next": "12.2.0",

View File

@@ -6,7 +6,7 @@ import type {
Simplify,
} from "blitz"
import Head from "next/head"
import React from "react"
import React, {ReactNode} from "react"
import {QueryClient, QueryClientProvider} from "react-query"
import {Hydrate, HydrateOptions} from "react-query/hydration"
import {withSuperJSONPage} from "./superjson"
@@ -80,7 +80,7 @@ export type BlitzPage<P = {}> = React.ComponentType<P> & {
suppressFirstRenderFlicker?: boolean
redirectAuthenticatedTo?: RedirectAuthenticatedTo | RedirectAuthenticatedToFn
}
export type BlitzLayout<P = {}> = React.ComponentType<P> & {
export type BlitzLayout<P = {}> = React.ComponentType<P & {children: ReactNode}> & {
authenticate?: boolean | {redirectTo?: string | RouteUrlObject}
redirectAuthenticatedTo?: RedirectAuthenticatedTo | RedirectAuthenticatedToFn
}

View File

@@ -134,7 +134,9 @@ export const setupBlitzServer = ({plugins, onError}: SetupBlitzOptions) => {
defaultOptions = {},
infinite = false,
) => {
queryClient = new QueryClient({defaultOptions})
if (!queryClient) {
queryClient = new QueryClient({defaultOptions})
}
const queryKey = infinite ? getInfiniteQueryKey(fn, input) : getQueryKey(fn, input)
await queryClient.prefetchQuery(queryKey, () => fn(input, ctx))

View File

@@ -1,5 +1,16 @@
# @blitzjs/rpc
## 2.0.0-alpha.55
### Patch Changes
- df7cee84: Fix pipe resolver return type
- Updated dependencies [8f166a5d]
- Updated dependencies [54a66a95]
- Updated dependencies [1c809094]
- blitz@2.0.0-alpha.55
- @blitzjs/auth@2.0.0-alpha.55
## 2.0.0-alpha.54
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@blitzjs/rpc",
"version": "2.0.0-alpha.54",
"version": "2.0.0-alpha.55",
"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,7 +20,7 @@
"dist/**"
],
"dependencies": {
"@blitzjs/auth": "2.0.0-alpha.54",
"@blitzjs/auth": "2.0.0-alpha.55",
"b64-lite": "1.4.0",
"bad-behavior": "1.0.1",
"chalk": "^4.1.0",
@@ -30,11 +30,11 @@
"zod": "3.17.3"
},
"devDependencies": {
"@blitzjs/config": "workspace:2.0.0-alpha.54",
"@blitzjs/config": "workspace:2.0.0-alpha.55",
"@types/debug": "4.1.7",
"@types/react": "18.0.1",
"@types/react-dom": "17.0.14",
"blitz": "2.0.0-alpha.54",
"blitz": "2.0.0-alpha.55",
"next": "12.2.0",
"react": "18.0.0",
"react-dom": "18.0.0",
@@ -43,7 +43,7 @@
"watch": "1.0.2"
},
"peerDependencies": {
"blitz": "2.0.0-alpha.54",
"blitz": "2.0.0-alpha.55",
"next": ">=12.2.0"
},
"publishConfig": {

View File

@@ -54,7 +54,7 @@ function pipe<A, B, C, D, E, F, G, CA = Ctx, CB = CA, CC = CB, CD = CC, CE = CD,
de: PipeFn<D, E, CD, CE>,
ef: PipeFn<E, F, CE, CF>,
fg: PipeFn<F, G, CF, CG>,
): (input: A, ctx: CA) => EnsurePromise<CG>
): (input: A, ctx: CA) => EnsurePromise<G>
function pipe<
A,
B,

View File

@@ -1,5 +1,14 @@
# blitz
## 2.0.0-alpha.55
### Patch Changes
- 8f166a5d: Check for new versions when running CLI
- 54a66a95: Show all blitz packages when running `blitz version` command
- Updated dependencies [ab4d9de7]
- @blitzjs/generator@2.0.0-alpha.55
## 2.0.0-alpha.54
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "blitz",
"version": "2.0.0-alpha.54",
"version": "2.0.0-alpha.55",
"scripts": {
"build": "unbuild",
"dev": "watch unbuild src --wait=0.2",
@@ -23,8 +23,9 @@
"blitz": "bin/blitz"
},
"dependencies": {
"@blitzjs/generator": "2.0.0-alpha.54",
"@blitzjs/generator": "2.0.0-alpha.55",
"arg": "5.0.1",
"boxen": "7.0.0",
"chalk": "^4.1.0",
"console-table-printer": "2.10.0",
"cross-spawn": "7.0.3",
@@ -37,6 +38,7 @@
"find-up": "4.1.0",
"fs-extra": "10.0.1",
"hasbin": "1.2.3",
"node-fetch": "3.2.3",
"npm-which": "3.0.1",
"ora": "5.3.0",
"os-name": "5.0.1",
@@ -52,7 +54,7 @@
"watchpack": "2.1.1"
},
"devDependencies": {
"@blitzjs/config": "workspace:2.0.0-alpha.54",
"@blitzjs/config": "workspace:2.0.0-alpha.55",
"@types/cookie": "0.4.1",
"@types/cross-spawn": "6.0.2",
"@types/debug": "4.1.7",
@@ -69,7 +71,6 @@
"@types/test-listen": "1.1.0",
"@types/watchpack": "1.1.1",
"express": "4.17.3",
"node-fetch": "3.2.3",
"react": "18.0.0",
"test-listen": "1.1.0",
"typescript": "^4.5.3",

View File

@@ -7,6 +7,7 @@ import {CliCommand} from "../index"
import arg from "arg"
import {AppGenerator, AppGeneratorOptions, getLatestVersion} from "@blitzjs/generator"
import {runPrisma} from "../../prisma-utils"
import {checkLatestVersion} from "../utils/check-latest-version"
const forms = {
"react-final-form": "React Final Form" as const,
@@ -220,7 +221,7 @@ const determinePkgManagerToInstallDeps = async () => {
const newApp: CliCommand = async (argv) => {
const shouldUpgrade = !args["--skip-upgrade"]
if (shouldUpgrade) {
//TODO: Handle checking for updates
await checkLatestVersion()
}
await determineProjectName()

View File

@@ -1,12 +1,12 @@
import {NON_STANDARD_NODE_ENV} from "./utils/constants"
import arg from "arg"
import {loadEnvConfig} from "../env-utils"
import {getCommandBin} from "./utils/config"
import spawn from "cross-spawn"
import {readdirSync} from "fs-extra"
import resolveFrom from "resolve-from"
import pkgDir from "pkg-dir"
import {join} from "path"
import {loadEnvConfig} from "../env-utils"
import {NON_STANDARD_NODE_ENV} from "./utils/constants"
import {getCommandBin} from "./utils/config"
import {readVersions} from "./utils/read-versions"
import {getPkgManager} from "./utils/helpers"
const commonArgs = {
// Flags
@@ -57,9 +57,6 @@ if (aliases[args._[0] as Alias]) {
const forwardedArgs = blitzCommand ? args._.slice(1) : args._
const globalBlitzPath = resolveFrom(__dirname, "blitz")
const localBlitzPath = resolveFrom.silent(process.cwd(), "blitz")
async function runCommandFromBin() {
if (!args._[0]) {
console.log("No command specified")
@@ -83,18 +80,17 @@ async function runCommandFromBin() {
async function printEnvInfo() {
const osName = await import("os-name")
const envinfo = await import("envinfo")
const pkgManager = readdirSync(process.cwd()).includes("pnpm-lock.yaml")
? "pnpm"
: readdirSync(process.cwd()).includes("yarn-lock.yaml")
? "yarn"
: "npm"
const pkgManager = getPkgManager()
const env = await envinfo.default.run(
{
System: ["OS", "CPU", "Memory", "Shell"],
Binaries: ["Node", "Yarn", "npm", "pnpm"],
npmPackages: [
"blitz",
"@blitzjs/rpc",
"@blitzjs/auth",
"@blitzjs/next",
"typescript",
"react",
"react-dom",
@@ -106,18 +102,13 @@ async function printEnvInfo() {
{showNotFound: true},
)
const globalBlitzPkgJsonPath = pkgDir.sync(globalBlitzPath)
const localBlitzPkgJsonPath = pkgDir.sync(localBlitzPath)
if (globalBlitzPkgJsonPath && globalBlitzPkgJsonPath !== localBlitzPkgJsonPath) {
// This branch won't run if user does `npx blitz` or `yarn blitz`
const globalVersion = require(join(globalBlitzPkgJsonPath, "package.json")).version
const {globalVersion, localVersions} = readVersions()
if (globalVersion) {
console.log(`Blitz version: ${globalVersion} (global)`)
}
if (localBlitzPkgJsonPath) {
const localVersion = require(join(localBlitzPkgJsonPath, "package.json")).version
console.log(`Blitz version: ${localVersion} (local)`)
if (localVersions.blitz) {
console.log(`Blitz version: ${localVersions.blitz} (local)`)
}
console.log(

View File

@@ -0,0 +1,185 @@
import findUp from "find-up"
import resolveFrom from "resolve-from"
import {join, dirname} from "path"
import fs from "fs"
import {readVersions, resolveVersionType} from "./read-versions"
import {getPkgManager} from "./helpers"
import superjson from "superjson"
const returnNpmEndpoint = (packageName: string) => {
return `https://registry.npmjs.org/-/package/${packageName}/dist-tags`
}
function getUpdateString(packageName: string, tag: string, isGlobal?: boolean) {
const pkgManager = getPkgManager()
switch (pkgManager) {
case "npm":
return `npm install${isGlobal ? " -g" : ""} ${packageName}@${tag}`
case "yarn":
return `yarn${isGlobal ? " global" : ""} add ${packageName}@${tag}`
case "pnpm":
return `pnpm install${isGlobal ? " -g" : ""} ${packageName}@${tag}`
}
}
const isInternalBlitzMonorepoDevelopment = fs.existsSync(
join(process.cwd(), "..", "..", "packages", "blitz", "dist", "chunks"),
)
async function findNodeModulesRoot(src: string) {
const blitzPkgLocation = dirname(
(await findUp("package.json", {
cwd: resolveFrom(src, "blitz"),
})) ?? "",
)
if (!blitzPkgLocation) {
throw new Error("Internal Blitz Error: unable to find 'blitz' package location")
}
return blitzPkgLocation.includes(".pnpm")
? join(blitzPkgLocation, "../../../../")
: join(blitzPkgLocation, "../")
}
export async function checkLatestVersion() {
if (!isInternalBlitzMonorepoDevelopment) {
const fetch = await import("node-fetch")
const boxen = await import("boxen")
const versions = readVersions()
const nodeModulesRoot = await findNodeModulesRoot(process.cwd())
const dotBlitzCacheExists = fs.existsSync(
join(nodeModulesRoot, ".blitz", "checkUpdateCache.json"),
)
let dotBlitzCache
let shouldRun = true
if (dotBlitzCacheExists) {
dotBlitzCache = fs.readFileSync(join(nodeModulesRoot, ".blitz", "checkUpdateCache.json"))
const now = new Date()
const msBetweenTimes = Math.abs(
superjson.parse<{lastUpdated: Date}>(dotBlitzCache.toString()).lastUpdated.getTime() -
now.getTime(),
)
const hoursBetweenTimes = msBetweenTimes / (60 * 60 * 1000)
shouldRun = hoursBetweenTimes > 24
}
if (shouldRun) {
let errors: {message: string; instructions: string}[] = []
try {
const blitzResponse = await fetch.default(returnNpmEndpoint("blitz"))
const remoteBlitzVersions = (await blitzResponse.json()) as Record<string, string>
const blitzNextResponse = await fetch.default(returnNpmEndpoint("@blitzjs/next"))
const remoteBlitzNextVersions = (await blitzNextResponse.json()) as Record<string, string>
const blitzAuthResponse = await fetch.default(returnNpmEndpoint("@blitzjs/auth"))
const remoteBlitzAuthVersions = (await blitzAuthResponse.json()) as Record<string, string>
const blitzRpcResponse = await fetch.default(returnNpmEndpoint("@blitzjs/rpc"))
const remoteBlitzRpcVersions = (await blitzRpcResponse.json()) as Record<string, string>
for (const version of Object.entries(versions)) {
if (version[0] === "globalVersion") {
const versionType = resolveVersionType(version[1] as string)
if (remoteBlitzVersions.hasOwnProperty("beta") && versionType !== "beta") {
errors.push({
message: `blitz(global) (current) ${version[1]} -> (latest) ${remoteBlitzVersions["beta"]}`,
instructions: `${getUpdateString("blitz", "beta", true)}`,
})
} else if (remoteBlitzVersions[versionType] !== version[1]) {
errors.push({
message: `blitz(global) (current) ${version[1]} -> (latest) ${remoteBlitzVersions[versionType]}`,
instructions: `${getUpdateString("blitz", versionType, true)}`,
})
}
} else if (version[0] === "localVersions") {
for (const localVersion of Object.entries(version[1])) {
const versionType = resolveVersionType(localVersion[1] as string)
switch (localVersion[0]) {
case "blitz":
if (remoteBlitzVersions.hasOwnProperty("beta") && versionType !== "beta") {
errors.push({
message: `blitz (current) ${localVersion[1]} -> (latest) ${remoteBlitzVersions["beta"]}`,
instructions: `${getUpdateString("blitz", "beta", false)}`,
})
} else if (remoteBlitzVersions[versionType] !== localVersion[1]) {
errors.push({
message: `blitz (current) ${localVersion[1]} -> (latest) ${remoteBlitzVersions[versionType]}`,
instructions: `${getUpdateString("blitz", versionType, false)}`,
})
}
break
case "blitzAuth":
if (remoteBlitzAuthVersions.hasOwnProperty("beta") && versionType !== "beta") {
errors.push({
message: `@blitzjs/auth (current) ${localVersion[1]} -> (latest) ${remoteBlitzAuthVersions["beta"]}`,
instructions: `${getUpdateString("@blitzjs/auth", "beta", false)}`,
})
} else if (remoteBlitzAuthVersions[versionType] !== localVersion[1]) {
errors.push({
message: `@blitzjs/auth (current) ${localVersion[1]} -> (latest) ${remoteBlitzAuthVersions[versionType]}`,
instructions: `${getUpdateString("@blitzjs/auth", versionType, false)}`,
})
}
break
case "blitzNext":
if (remoteBlitzNextVersions.hasOwnProperty("beta") && versionType !== "beta") {
errors.push({
message: `@blitzjs/next (current) ${localVersion[1]} -> (latest) ${remoteBlitzNextVersions["beta"]}`,
instructions: `${getUpdateString("@blitzjs/next", "beta", false)}`,
})
} else if (remoteBlitzNextVersions[versionType] !== localVersion[1]) {
errors.push({
message: `@blitzjs/next (current) ${localVersion[1]} -> (latest) ${remoteBlitzNextVersions[versionType]}`,
instructions: `${getUpdateString("@blitzjs/next", versionType, false)}`,
})
}
break
case "blitzRpc":
if (remoteBlitzRpcVersions.hasOwnProperty("beta") && versionType !== "beta") {
errors.push({
message: `@blitzjs/rpc (current) ${localVersion[1]} -> (latest) ${remoteBlitzRpcVersions["beta"]}`,
instructions: `${getUpdateString("@blitzjs/rpc", "beta", false)}`,
})
} else if (remoteBlitzRpcVersions[versionType] !== localVersion[1]) {
errors.push({
message: `@blitzjs/rpc (current) ${localVersion[1]} -> (latest) ${remoteBlitzRpcVersions[versionType]}`,
instructions: `${getUpdateString("@blitzjs/rpc", versionType, false)}`,
})
}
break
}
}
}
}
console.log(
boxen.default(
`You are running outdated blitz packages\n\n ${errors
.map((e) => e.message)
.join("\n")} \n\n Run the following to update:\n ${errors
.map((e) => e.instructions)
.join("\n")}`,
{padding: 1},
),
)
const dotBlitz = join(nodeModulesRoot, ".blitz")
fs.writeFileSync(
join(dotBlitz, "checkUpdateCache.json"),
superjson.stringify({lastUpdated: new Date()}),
)
} catch (err) {
if (err instanceof fetch.FetchError) {
// TODO: Check if network error and throw otherwise
// pass fetch error
} else {
console.log(err)
}
}
}
}
}

View File

@@ -0,0 +1,9 @@
import {readdirSync} from "fs-extra"
export function getPkgManager() {
return readdirSync(process.cwd()).includes("pnpm-lock.yaml")
? "pnpm"
: readdirSync(process.cwd()).includes("yarn-lock.yaml")
? "yarn"
: "npm"
}

View File

@@ -7,6 +7,7 @@ import {
startCustomServer,
buildCustomServer,
} from "./next-utils"
import {checkLatestVersion} from "./check-latest-version"
import {readBlitzConfig} from "../../server-utils"
export async function build(config: ServerConfig) {
@@ -18,7 +19,7 @@ export async function build(config: ServerConfig) {
export async function dev(config: ServerConfig) {
const {rootFolder, nextBin} = await normalize({...config, env: "dev"})
void checkLatestVersion()
if (customServerExists()) {
console.log("Using your custom server")

View File

@@ -0,0 +1,79 @@
import {join} from "path"
import pkgDir from "pkg-dir"
import resolveFrom from "resolve-from"
const globalBlitzPath = resolveFrom(__dirname, "blitz")
const localBlitzPath = resolveFrom.silent(process.cwd(), "blitz")
const localBlitzAuthPath = resolveFrom.silent(process.cwd(), "@blitzjs/auth")
const localBlitzRpcPath = resolveFrom.silent(process.cwd(), "@blitzjs/rpc")
const localBlitzNextPath = resolveFrom.silent(process.cwd(), "@blitzjs/next")
export function readVersions() {
const globalBlitzPkgJsonPath = pkgDir.sync(globalBlitzPath)
const localBlitzPkgJsonPath = pkgDir.sync(localBlitzPath)
const localBlitzAuthPkgJsonPath = pkgDir.sync(localBlitzAuthPath)
const localBlitzNextPkgJsonPath = pkgDir.sync(localBlitzNextPath)
const localBlitzRpcPkgJsonPath = pkgDir.sync(localBlitzRpcPath)
const versions: {
globalVersion?: string
localVersions: {
blitz?: string
blitzAuth?: string
blitzRpc?: string
blitzNext?: string
}
} = {globalVersion: "", localVersions: {}}
// This branch won't run if user does `npx blitz` or `yarn blitz`
if (globalBlitzPkgJsonPath && globalBlitzPkgJsonPath !== localBlitzPkgJsonPath) {
versions.globalVersion = require(join(globalBlitzPkgJsonPath, "package.json")).version
}
if (localBlitzPkgJsonPath) {
versions.localVersions.blitz = require(join(localBlitzPkgJsonPath, "package.json")).version
}
if (localBlitzAuthPkgJsonPath) {
versions.localVersions.blitzAuth = require(join(
localBlitzAuthPkgJsonPath,
"package.json",
)).version
}
if (localBlitzNextPkgJsonPath) {
versions.localVersions.blitzNext = require(join(
localBlitzNextPkgJsonPath,
"package.json",
)).version
}
if (localBlitzRpcPkgJsonPath) {
versions.localVersions.blitzRpc = require(join(
localBlitzRpcPkgJsonPath,
"package.json",
)).version
}
return versions
}
export function resolveVersionType(version: string) {
if (version.includes("alpha")) {
return "alpha" as const
}
if (version.includes("beta")) {
return "beta" as const
}
if (version.includes("danger")) {
return "danger" as const
}
if (version.includes("canary")) {
return "canary" as const
}
return "latest" as const
}

View File

@@ -1,5 +1,15 @@
# @blitzjs/codemod
## 2.0.0-alpha.55
### Patch Changes
- Updated dependencies [8f166a5d]
- Updated dependencies [54a66a95]
- Updated dependencies [ab4d9de7]
- blitz@2.0.0-alpha.55
- @blitzjs/generator@2.0.0-alpha.55
## 2.0.0-alpha.54
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@blitzjs/codemod",
"version": "2.0.0-alpha.54",
"version": "2.0.0-alpha.55",
"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.54",
"@blitzjs/generator": "2.0.0-alpha.55",
"arg": "5.0.1",
"blitz": "2.0.0-alpha.54",
"blitz": "2.0.0-alpha.55",
"chalk": "^4.1.0",
"cross-spawn": "7.0.3",
"debug": "4.3.3",

View File

@@ -1,5 +1,7 @@
# @blitzjs/config
## 2.0.0-alpha.55
## 2.0.0-alpha.54
## 2.0.0-alpha.53

View File

@@ -1,7 +1,7 @@
{
"name": "@blitzjs/config",
"private": true,
"version": "2.0.0-alpha.54",
"version": "2.0.0-alpha.55",
"license": "MIT",
"dependencies": {
"@typescript-eslint/eslint-plugin": "5.9.1",

View File

@@ -1,5 +1,11 @@
# @blitzjs/generator
## 2.0.0-alpha.55
### Patch Changes
- ab4d9de7: Don't try to copy RPC API endpoint in templates that don't have it
## 2.0.0-alpha.54
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@blitzjs/generator",
"version": "2.0.0-alpha.54",
"version": "2.0.0-alpha.55",
"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.54",
"@blitzjs/config": "2.0.0-alpha.55",
"@juanm04/cpx": "2.0.1",
"@types/babel__core": "7.1.19",
"@types/diff": "5.0.2",

View File

@@ -30,6 +30,7 @@ export interface AppGeneratorOptions extends GeneratorOptions {
form?: "React Final Form" | "React Hook Form" | "Formik"
onPostInstall?: () => Promise<void>
}
type PkgManager = "npm" | "yarn" | "pnpm"
export class AppGenerator extends Generator<AppGeneratorOptions> {
@@ -76,10 +77,14 @@ export class AppGenerator extends Generator<AppGeneratorOptions> {
this.destinationPath(this.options.useTs ? "package.ts.json" : "package.js.json"),
this.destinationPath("package.json"),
)
this.fs.move(
this.destinationPath(`pages/api/rpc/blitzrpcroute.${this.options.useTs ? "ts" : "js"}`),
this.destinationPath(`pages/api/rpc/[[...blitz]].${this.options.useTs ? "ts" : "js"}`),
)
const rpcEndpointPath = `pages/api/rpc/blitzrpcroute.${this.options.useTs ? "ts" : "js"}`
if (this.fs.exists(rpcEndpointPath)) {
this.fs.move(
this.destinationPath(rpcEndpointPath),
this.destinationPath(`pages/api/rpc/[[...blitz]].${this.options.useTs ? "ts" : "js"}`),
)
}
if (!this.options.template.skipForms) {
this.updateForms()
@@ -286,6 +291,7 @@ export class AppGenerator extends Generator<AppGeneratorOptions> {
}
commitSpinner.succeed()
}
private updateForms() {
const pkg = this.fs.readJSON(this.destinationPath("package.json")) as
| Record<string, any>

View File

@@ -1,7 +1,8 @@
import Head from "next/head"
import React, { FC } from "react"
import React, {FC} from "react"
import {BlitzLayout} from "@blitzjs/next"
const Layout: FC<{ title?: string; children?: React.ReactNode }> = ({ title, children }) => {
const Layout: BlitzLayout<{title?: string; children?: React.ReactNode}> = ({title, children}) => {
return (
<>
<Head>

View File

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

View File

@@ -1,29 +0,0 @@
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 {

143
pnpm-lock.yaml generated
View File

@@ -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-alpha.53
blitz: workspace:2.0.0-alpha.54
eslint: 7.32.0
eslint-config-next: 12.2.0
eslint-config-prettier: 8.5.0
@@ -324,7 +324,7 @@ importers:
"@vitejs/plugin-react": 1.3.0
delay: 5.0.0
eslint: 7.32.0
eslint-config-next: 12.2.0_hrkuebk64jiu2ut2d2sm4oylnu
eslint-config-next: 12.2.2_hrkuebk64jiu2ut2d2sm4oylnu
eslint-plugin-testing-library: 5.0.1_hrkuebk64jiu2ut2d2sm4oylnu
jsdom: 19.0.0
typescript: 4.6.3
@@ -475,8 +475,8 @@ importers:
packages/blitz:
specifiers:
"@blitzjs/config": workspace:2.0.0-alpha.53
"@blitzjs/generator": 2.0.0-alpha.53
"@blitzjs/config": workspace:2.0.0-alpha.54
"@blitzjs/generator": 2.0.0-alpha.54
"@types/cookie": 0.4.1
"@types/cross-spawn": 6.0.2
"@types/debug": 4.1.7
@@ -493,6 +493,7 @@ importers:
"@types/test-listen": 1.1.0
"@types/watchpack": 1.1.1
arg: 5.0.1
boxen: 7.0.0
chalk: ^4.1.0
console-table-printer: 2.10.0
cross-spawn: 7.0.3
@@ -529,6 +530,7 @@ importers:
dependencies:
"@blitzjs/generator": link:../generator
arg: 5.0.1
boxen: 7.0.0
chalk: 4.1.2
console-table-printer: 2.10.0
cross-spawn: 7.0.3
@@ -541,6 +543,7 @@ importers:
find-up: 4.1.0
fs-extra: 10.0.1
hasbin: 1.2.3
node-fetch: 3.2.3
npm-which: 3.0.1
ora: 5.3.0
os-name: 5.0.1
@@ -572,7 +575,6 @@ importers:
"@types/test-listen": 1.1.0
"@types/watchpack": 1.1.1
express: 4.17.3
node-fetch: 3.2.3
react: 18.0.0
test-listen: 1.1.0
typescript: 4.6.3
@@ -582,7 +584,7 @@ importers:
packages/blitz-auth:
specifiers:
"@blitzjs/config": workspace:2.0.0-alpha.53
"@blitzjs/config": workspace:2.0.0-alpha.54
"@testing-library/react": 13.0.0
"@testing-library/react-hooks": 7.0.2
"@types/b64-lite": 1.3.0
@@ -596,7 +598,7 @@ importers:
"@types/secure-password": 3.1.1
b64-lite: 1.4.0
bad-behavior: 1.0.1
blitz: 2.0.0-alpha.53
blitz: 2.0.0-alpha.54
cookie: 0.4.1
cookie-session: 2.0.0
debug: 4.3.3
@@ -647,8 +649,8 @@ importers:
packages/blitz-next:
specifiers:
"@blitzjs/config": workspace:2.0.0-alpha.53
"@blitzjs/rpc": 2.0.0-alpha.53
"@blitzjs/config": workspace:2.0.0-alpha.54
"@blitzjs/rpc": 2.0.0-alpha.54
"@testing-library/dom": 8.13.0
"@testing-library/jest-dom": 5.16.3
"@testing-library/react": 13.0.0
@@ -659,7 +661,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-alpha.53
blitz: 2.0.0-alpha.54
cross-spawn: 7.0.3
debug: 4.3.3
find-up: 4.1.0
@@ -708,14 +710,14 @@ importers:
packages/blitz-rpc:
specifiers:
"@blitzjs/auth": 2.0.0-alpha.53
"@blitzjs/config": workspace:2.0.0-alpha.53
"@blitzjs/auth": 2.0.0-alpha.54
"@blitzjs/config": workspace:2.0.0-alpha.54
"@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-alpha.53
blitz: 2.0.0-alpha.54
chalk: ^4.1.0
debug: 4.3.3
next: 12.2.0
@@ -757,12 +759,12 @@ importers:
"@babel/plugin-syntax-typescript": 7.17.12
"@babel/preset-env": 7.12.10
"@blitzjs/config": workspace:*
"@blitzjs/generator": 2.0.0-alpha.53
"@blitzjs/generator": 2.0.0-alpha.54
"@types/jscodeshift": 0.11.2
"@types/node": 17.0.16
arg: 5.0.1
ast-types: 0.14.2
blitz: 2.0.0-alpha.53
blitz: 2.0.0-alpha.54
chalk: ^4.1.0
cross-spawn: 7.0.3
debug: 4.3.3
@@ -817,7 +819,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-alpha.53
"@blitzjs/config": 2.0.0-alpha.54
"@juanm04/cpx": 2.0.1
"@mrleebo/prisma-ast": 0.2.6
"@types/babel__core": 7.1.19
@@ -908,7 +910,7 @@ importers:
packages/pkg-template:
specifiers:
"@blitzjs/config": 2.0.0-alpha.53
"@blitzjs/config": 2.0.0-alpha.54
"@types/react": 18.0.1
"@types/react-dom": 17.0.14
"@typescript-eslint/eslint-plugin": 5.9.1
@@ -3449,6 +3451,15 @@ packages:
dependencies:
glob: 7.1.7
/@next/eslint-plugin-next/12.2.2:
resolution:
{
integrity: sha512-XOi0WzJhGH3Lk51SkSu9eZxF+IY1ZZhWcJTIGBycAbWU877IQa6+6KxMATWCOs7c+bmp6Sd8KywXJaDRxzu0JA==,
}
dependencies:
glob: 7.1.7
dev: true
/@next/swc-android-arm-eabi/12.2.0:
resolution:
{
@@ -5888,6 +5899,23 @@ packages:
widest-line: 3.1.0
dev: false
/boxen/7.0.0:
resolution:
{
integrity: sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==,
}
engines: {node: ">=14.16"}
dependencies:
ansi-align: 3.0.1
camelcase: 7.0.0
chalk: 5.0.1
cli-boxes: 3.0.0
string-width: 5.1.2
type-fest: 2.16.0
widest-line: 4.0.1
wrap-ansi: 8.0.1
dev: false
/brace-expansion/1.1.11:
resolution:
{
@@ -6155,6 +6183,14 @@ packages:
}
engines: {node: ">=10"}
/camelcase/7.0.0:
resolution:
{
integrity: sha512-JToIvOmz6nhGsUhAYScbo2d6Py5wojjNfoxoc2mEVLUdJ70gJK2gnd+ABY1Tc3sVMyK7QDPtN0T/XdlCQWITyQ==,
}
engines: {node: ">=14.16"}
dev: false
/caniuse-lite/1.0.30001339:
resolution:
{
@@ -6214,7 +6250,6 @@ packages:
integrity: sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==,
}
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
dev: true
/char-regex/1.0.2:
resolution:
@@ -6336,6 +6371,14 @@ packages:
engines: {node: ">=6"}
dev: false
/cli-boxes/3.0.0:
resolution:
{
integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==,
}
engines: {node: ">=10"}
dev: false
/cli-cursor/3.1.0:
resolution:
{
@@ -6849,7 +6892,6 @@ packages:
integrity: sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==,
}
engines: {node: ">= 12"}
dev: true
/data-urls/2.0.0:
resolution:
@@ -8402,6 +8444,34 @@ packages:
- supports-color
dev: false
/eslint-config-next/12.2.2_hrkuebk64jiu2ut2d2sm4oylnu:
resolution:
{
integrity: sha512-oJhWBLC4wDYYUFv/5APbjHUFd0QRFCojMdj/QnMoOEktmeTvwnnoA8F8uaXs0fQgsaTK0tbUxBRv9/Y4/rpxOA==,
}
peerDependencies:
eslint: ^7.23.0 || ^8.0.0
typescript: ">=3.3.1"
peerDependenciesMeta:
typescript:
optional: true
dependencies:
"@next/eslint-plugin-next": 12.2.2
"@rushstack/eslint-patch": 1.1.3
"@typescript-eslint/parser": 5.28.0_hrkuebk64jiu2ut2d2sm4oylnu
eslint: 7.32.0
eslint-import-resolver-node: 0.3.6
eslint-import-resolver-typescript: 2.7.1_hpmu7kn6tcn2vnxpfzvv33bxmy
eslint-plugin-import: 2.26.0_zhtk6rij7obli3ams3sxis7j7e
eslint-plugin-jsx-a11y: 6.5.1_eslint@7.32.0
eslint-plugin-react: 7.30.0_eslint@7.32.0
eslint-plugin-react-hooks: 4.5.0_eslint@7.32.0
typescript: 4.6.3
transitivePeerDependencies:
- eslint-import-resolver-webpack
- supports-color
dev: true
/eslint-config-prettier/8.5.0:
resolution:
{
@@ -9197,7 +9267,6 @@ packages:
dependencies:
node-domexception: 1.0.0
web-streams-polyfill: 3.2.1
dev: true
/file-entry-cache/6.0.1:
resolution:
@@ -9409,7 +9478,6 @@ packages:
engines: {node: ">=12.20.0"}
dependencies:
fetch-blob: 3.1.5
dev: true
/forwarded/0.2.0:
resolution:
@@ -12853,7 +12921,6 @@ packages:
integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==,
}
engines: {node: ">=10.5.0"}
dev: true
/node-fetch/3.2.3:
resolution:
@@ -12865,7 +12932,6 @@ packages:
data-uri-to-buffer: 4.0.0
fetch-blob: 3.1.5
formdata-polyfill: 4.0.10
dev: true
/node-gyp-build/4.4.0:
resolution:
@@ -16406,6 +16472,14 @@ packages:
engines: {node: ">=8"}
dev: false
/type-fest/2.16.0:
resolution:
{
integrity: sha512-qpaThT2HQkFb83gMOrdKVsfCN7LKxP26Yq+smPzY1FqoHRjqmjqHXA7n5Gkxi8efirtbeEUxzfEdePthQWCuHw==,
}
engines: {node: ">=12.20"}
dev: false
/type-is/1.6.18:
resolution:
{
@@ -16919,7 +16993,6 @@ packages:
integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==,
}
engines: {node: ">= 8"}
dev: true
/webidl-conversions/5.0.0:
resolution:
@@ -17093,6 +17166,16 @@ packages:
string-width: 4.2.3
dev: false
/widest-line/4.0.1:
resolution:
{
integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==,
}
engines: {node: ">=12"}
dependencies:
string-width: 5.1.2
dev: false
/windows-release/5.0.1:
resolution:
{
@@ -17145,6 +17228,18 @@ packages:
string-width: 4.2.3
strip-ansi: 6.0.1
/wrap-ansi/8.0.1:
resolution:
{
integrity: sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==,
}
engines: {node: ">=12"}
dependencies:
ansi-styles: 6.1.0
string-width: 5.1.2
strip-ansi: 7.0.1
dev: false
/wrappy/1.0.2:
resolution:
{