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

Compare commits

...

21 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
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
64 changed files with 1120 additions and 295 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
---
Check for new versions when running CLI

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,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,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/rpc": patch
---
Fix pipe resolver return type

View File

@@ -25,6 +25,8 @@
"breezy-cameras-double",
"bright-mangos-run",
"cool-doors-invent",
"cool-horses-check",
"curly-seas-serve",
"dirty-monkeys-greet",
"eleven-humans-sort",
"empty-berries-rule",
@@ -37,25 +39,33 @@
"four-meals-fry",
"fuzzy-jars-admire",
"gentle-dogs-reply",
"good-apes-drum",
"good-insects-wink",
"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",
"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",
"perfect-eyes-repeat",
"plenty-bottles-swim",
"poor-peas-lick",
"poor-penguins-look",
@@ -70,12 +80,15 @@
"sharp-falcons-begin",
"shy-olives-hang",
"silent-colts-reply",
"slimy-needles-taste",
"slow-walls-poke",
"small-socks-confess",
"smooth-planets-admire",
"soft-adults-smell",
"strong-apes-reply",
"stupid-walls-sell",
"swift-drinks-dress",
"tall-meals-learn",
"tame-keys-reply",
"tasty-news-collect",
"ten-hairs-listen",
@@ -83,7 +96,10 @@
"tender-pianos-check",
"thick-parrots-float",
"thirty-countries-build",
"tidy-clouds-smoke",
"twelve-lemons-smile",
"twenty-beans-pump",
"two-carpets-rhyme",
"two-kiwis-help",
"two-tigers-type",
"unlucky-papayas-sleep",

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,5 @@
---
"@blitzjs/auth": patch
---
Fix `Page.authenticate` not working for layout components

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 @@
---
"@blitzjs/next": patch
---
Fix prefetching multiple queries causes only the last one to be passed to page

View File

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

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,9 +29,9 @@
"@blitzjs/rpc": "workspace:*",
"@hookform/resolvers": "2.8.8",
"@prisma/client": "3.9.0",
"blitz": "workspace:2.0.0-alpha.51",
"blitz": "workspace:2.0.0-alpha.55",
"next": "12.2.0",
"prisma": "3.9.0",
"prisma": "4.0.0",
"react": "18.0.0",
"react-dom": "18.0.0",
"react-hook-form": "7.29.0",
@@ -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

@@ -28,7 +28,7 @@
"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

@@ -20,7 +20,7 @@
"blitz": "workspace:*",
"lowdb": "3.0.0",
"next": "12.2.0",
"prisma": "3.9.0",
"prisma": "4.0.0",
"react": "18.0.0",
"react-dom": "18.0.0"
},

View File

@@ -20,7 +20,7 @@
"blitz": "workspace:*",
"lowdb": "3.0.0",
"next": "12.2.0",
"prisma": "3.9.0",
"prisma": "4.0.0",
"react": "18.0.0",
"react-dom": "18.0.0"
},

View File

@@ -15,7 +15,7 @@
"@prisma/client": "3.9.0",
"blitz": "workspace:*",
"next": "12.2.0",
"prisma": "3.9.0",
"prisma": "4.0.0",
"react": "18.0.0",
"react-dom": "18.0.0",
"react-query": "3.39.0"

View File

@@ -23,7 +23,7 @@
"blitz": "workspace:*",
"lowdb": "3.0.0",
"next": "12.2.0",
"prisma": "3.9.0",
"prisma": "4.0.0",
"react": "18.0.0",
"react-dom": "18.0.0"
},

View File

@@ -1,5 +1,38 @@
# @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
- 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

View File

@@ -1,6 +1,6 @@
{
"name": "@blitzjs/auth",
"version": "2.0.0-alpha.51",
"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.51",
"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.51",
"@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,36 @@
# @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
- 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

View File

@@ -1,6 +1,6 @@
{
"name": "@blitzjs/next",
"version": "2.0.0-alpha.51",
"version": "2.0.0-alpha.55",
"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.51",
"@blitzjs/rpc": "2.0.0-alpha.55",
"@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.51",
"@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",
@@ -42,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.51",
"blitz": "2.0.0-alpha.55",
"cross-spawn": "7.0.3",
"find-up": "4.1.0",
"next": "12.2.0",

View File

@@ -6,14 +6,15 @@ 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"
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"
@@ -67,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"]
@@ -78,34 +80,38 @@ 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
}
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

@@ -104,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))
}
@@ -134,9 +134,11 @@ export const setupBlitzServer = ({plugins, onError}: SetupBlitzOptions) => {
defaultOptions = {},
infinite = false,
) => {
queryClient = new QueryClient({defaultOptions})
if (!queryClient) {
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))
}
@@ -224,8 +226,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,44 @@
# @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
- 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

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.51",
"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.51",
"@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.51",
"@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.51",
"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.51",
"blitz": "2.0.0-alpha.55",
"next": ">=12.2.0"
},
"publishConfig": {

View File

@@ -50,8 +50,9 @@ export function __internal_addBlitzRpcResolver(
}
const dir = __dirname + (() => "")() // trick to avoid `@vercel/ncc` to glob import
const loaderServer = resolve(dir, "./loader-server.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
@@ -94,6 +95,10 @@ export function installWebpackConfig({
loader: loaderClient,
options: webpackRuleOptions,
},
{
loader: loaderServerResolvers,
options: webpackRuleOptions,
},
],
})
}

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

@@ -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,41 @@
# 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
- 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

View File

@@ -1,6 +1,6 @@
{
"name": "blitz",
"version": "2.0.0-alpha.51",
"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.51",
"@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.51",
"@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

@@ -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

@@ -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,
@@ -24,8 +25,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 +93,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 +138,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 +205,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",
@@ -222,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()
@@ -278,16 +277,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

@@ -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

@@ -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

View File

@@ -1,5 +1,45 @@
# @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
- 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

View File

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

View File

@@ -1,5 +1,13 @@
# @blitzjs/config
## 2.0.0-alpha.55
## 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

View File

@@ -1,13 +1,13 @@
{
"name": "@blitzjs/config",
"private": true,
"version": "2.0.0-alpha.51",
"version": "2.0.0-alpha.55",
"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,26 @@
# @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
- 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

View File

@@ -1,6 +1,6 @@
{
"name": "@blitzjs/generator",
"version": "2.0.0-alpha.51",
"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.51",
"@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> {
@@ -49,7 +50,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() {
@@ -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

@@ -28,7 +28,7 @@
"@prisma/client": "3.9.0",
"blitz": "alpha",
"next": "12.2.0",
"prisma": "3.9.0",
"prisma": "4.0.0",
"react": "18.0.0",
"react-dom": "18.0.0",
"zod": "3.17.3"
@@ -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

@@ -28,7 +28,7 @@
"@prisma/client": "3.9.0",
"blitz": "alpha",
"next": "12.2.0",
"prisma": "3.9.0",
"prisma": "4.0.0",
"react": "18.0.0",
"react-dom": "18.0.0",
"zod": "3.17.3"
@@ -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

@@ -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

@@ -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.51",
"@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 {

388
pnpm-lock.yaml generated
View File

@@ -48,8 +48,11 @@ importers:
"@types/node": 17.0.16
"@types/preview-email": 2.0.1
"@types/react": 18.0.1
blitz: workspace:2.0.0-alpha.50
"@typescript-eslint/eslint-plugin": 5.9.1
blitz: workspace:2.0.0-alpha.54
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
@@ -58,7 +61,7 @@ importers:
prettier-plugin-prisma: 3.8.0
pretty-quick: 3.1.3
preview-email: 3.x
prisma: 3.9.0
prisma: 4.0.0
react: 18.0.0
react-dom: 18.0.0
react-hook-form: 7.29.0
@@ -71,10 +74,10 @@ importers:
"@blitzjs/next": link:../../packages/blitz-next
"@blitzjs/rpc": link:../../packages/blitz-rpc
"@hookform/resolvers": 2.8.8_react-hook-form@7.29.0
"@prisma/client": 3.9.0_prisma@3.9.0
"@prisma/client": 3.9.0_prisma@4.0.0
blitz: link:../../packages/blitz
next: 12.2.0_zpnidt7m3osuk7shl3s4oenomq
prisma: 3.9.0
prisma: 4.0.0
react: 18.0.0
react-dom: 18.0.0_react@18.0.0
react-hook-form: 7.29.0_react@18.0.0
@@ -88,7 +91,10 @@ importers:
"@types/node": 17.0.16
"@types/preview-email": 2.0.1
"@types/react": 18.0.1
"@typescript-eslint/eslint-plugin": 5.9.1_hrkuebk64jiu2ut2d2sm4oylnu
eslint: 7.32.0
eslint-config-next: 12.2.0_hrkuebk64jiu2ut2d2sm4oylnu
eslint-config-prettier: 8.5.0_eslint@7.32.0
husky: 7.0.4
jest: 27.5.1_ts-node@10.7.0
lint-staged: 12.1.7
@@ -115,7 +121,7 @@ importers:
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
@@ -125,7 +131,7 @@ importers:
"@blitzjs/config": link:../../packages/config
"@blitzjs/next": link:../../packages/blitz-next
"@blitzjs/rpc": link:../../packages/blitz-rpc
"@prisma/client": 3.9.0_prisma@3.9.0
"@prisma/client": 3.9.0_prisma@4.0.0
"@types/jest": 27.4.1
"@types/passport-twitter": 1.0.37
blitz: link:../../packages/blitz
@@ -133,7 +139,7 @@ importers:
next: 12.2.0_zpnidt7m3osuk7shl3s4oenomq
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_react@18.0.0
ts-node: 10.7.0_typescript@4.6.3
@@ -162,7 +168,7 @@ importers:
lowdb: 3.0.0
next: 12.2.0
node-fetch: 3.2.3
prisma: 3.9.0
prisma: 4.0.0
react: 18.0.0
react-dom: 18.0.0
typescript: ^4.5.3
@@ -170,11 +176,11 @@ importers:
"@blitzjs/auth": link:../../packages/blitz-auth
"@blitzjs/config": link:../../packages/config
"@blitzjs/next": link:../../packages/blitz-next
"@prisma/client": 3.9.0_prisma@3.9.0
"@prisma/client": 3.9.0_prisma@4.0.0
blitz: link:../../packages/blitz
lowdb: 3.0.0
next: 12.2.0_zpnidt7m3osuk7shl3s4oenomq
prisma: 3.9.0
prisma: 4.0.0
react: 18.0.0
react-dom: 18.0.0_react@18.0.0
devDependencies:
@@ -249,7 +255,7 @@ importers:
lowdb: 3.0.0
next: 12.2.0
node-fetch: 3.2.3
prisma: 3.9.0
prisma: 4.0.0
react: 18.0.0
react-dom: 18.0.0
typescript: ^4.5.3
@@ -257,11 +263,11 @@ importers:
"@blitzjs/auth": link:../../packages/blitz-auth
"@blitzjs/next": link:../../packages/blitz-next
"@blitzjs/rpc": link:../../packages/blitz-rpc
"@prisma/client": 3.9.0_prisma@3.9.0
"@prisma/client": 3.9.0_prisma@4.0.0
blitz: link:../../packages/blitz
lowdb: 3.0.0
next: 12.2.0_zpnidt7m3osuk7shl3s4oenomq
prisma: 3.9.0
prisma: 4.0.0
react: 18.0.0
react-dom: 18.0.0_react@18.0.0
devDependencies:
@@ -295,7 +301,7 @@ importers:
eslint-plugin-testing-library: 5.0.1
jsdom: ^19.0.0
next: 12.2.0
prisma: 3.9.0
prisma: 4.0.0
react: 18.0.0
react-dom: 18.0.0
react-query: 3.39.0
@@ -305,10 +311,10 @@ importers:
"@blitzjs/config": link:../../packages/config
"@blitzjs/next": link:../../packages/blitz-next
"@blitzjs/rpc": link:../../packages/blitz-rpc
"@prisma/client": 3.9.0_prisma@3.9.0
"@prisma/client": 3.9.0_prisma@4.0.0
blitz: link:../../packages/blitz
next: 12.2.0_zpnidt7m3osuk7shl3s4oenomq
prisma: 3.9.0
prisma: 4.0.0
react: 18.0.0
react-dom: 18.0.0_react@18.0.0
react-query: 3.39.0_zpnidt7m3osuk7shl3s4oenomq
@@ -318,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
@@ -380,7 +386,7 @@ importers:
lowdb: 3.0.0
next: 12.2.0
node-fetch: 3.2.3
prisma: 3.9.0
prisma: 4.0.0
react: 18.0.0
react-dom: 18.0.0
typescript: ^4.5.3
@@ -388,11 +394,11 @@ importers:
"@blitzjs/auth": link:../../packages/blitz-auth
"@blitzjs/next": link:../../packages/blitz-next
"@blitzjs/rpc": link:../../packages/blitz-rpc
"@prisma/client": 3.9.0_prisma@3.9.0
"@prisma/client": 3.9.0_prisma@4.0.0
blitz: link:../../packages/blitz
lowdb: 3.0.0
next: 12.2.0_zpnidt7m3osuk7shl3s4oenomq
prisma: 3.9.0
prisma: 4.0.0
react: 18.0.0
react-dom: 18.0.0_react@18.0.0
devDependencies:
@@ -469,8 +475,8 @@ importers:
packages/blitz:
specifiers:
"@blitzjs/config": workspace:2.0.0-alpha.50
"@blitzjs/generator": 2.0.0-alpha.50
"@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
@@ -487,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
@@ -523,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
@@ -535,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
@@ -566,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
@@ -576,7 +584,7 @@ importers:
packages/blitz-auth:
specifiers:
"@blitzjs/config": workspace:2.0.0-alpha.50
"@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
@@ -590,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.50
blitz: 2.0.0-alpha.54
cookie: 0.4.1
cookie-session: 2.0.0
debug: 4.3.3
@@ -641,8 +649,8 @@ importers:
packages/blitz-next:
specifiers:
"@blitzjs/config": workspace:2.0.0-alpha.50
"@blitzjs/rpc": 2.0.0-alpha.50
"@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
@@ -653,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.50
blitz: 2.0.0-alpha.54
cross-spawn: 7.0.3
debug: 4.3.3
find-up: 4.1.0
@@ -702,14 +710,14 @@ importers:
packages/blitz-rpc:
specifiers:
"@blitzjs/auth": 2.0.0-alpha.50
"@blitzjs/config": workspace:2.0.0-alpha.50
"@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.50
blitz: 2.0.0-alpha.54
chalk: ^4.1.0
debug: 4.3.3
next: 12.2.0
@@ -751,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.50
"@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.50
blitz: 2.0.0-alpha.54
chalk: ^4.1.0
cross-spawn: 7.0.3
debug: 4.3.3
@@ -794,14 +802,14 @@ importers:
specifiers:
"@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
typescript: ^4.5.3
dependencies:
"@typescript-eslint/eslint-plugin": 5.9.1_z2xqbpkx26iu62rx2zdto5f5qy
"@typescript-eslint/parser": 5.9.1_typescript@4.6.3
eslint-config-next: 12.0.7_typescript@4.6.3
eslint-config-prettier: 8.3.0
eslint-config-next: 12.2.0_typescript@4.6.3
eslint-config-prettier: 8.5.0
devDependencies:
typescript: 4.6.3
@@ -811,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.50
"@blitzjs/config": 2.0.0-alpha.54
"@juanm04/cpx": 2.0.1
"@mrleebo/prisma-ast": 0.2.6
"@types/babel__core": 7.1.19
@@ -902,7 +910,7 @@ importers:
packages/pkg-template:
specifiers:
"@blitzjs/config": 2.0.0-alpha.50
"@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
@@ -3435,15 +3443,6 @@ packages:
integrity: sha512-/FCkDpL/8SodJEXvx/DYNlOD5ijTtkozf4PPulYPtkPOJaMPpBSOkzmsta4fnrnbdH6eZjbwbiXFdr6gSQCV4w==,
}
/@next/eslint-plugin-next/12.0.7:
resolution:
{
integrity: sha512-xk7eMjw4+roWWR/0ETIoToCNs2wdvCGgQUiUO390Rj33/82yxZsh+ODRSaFWkiKp8zHWQN5GCW+U5pfjt/gyQg==,
}
dependencies:
glob: 7.1.7
dev: false
/@next/eslint-plugin-next/12.2.0:
resolution:
{
@@ -3451,6 +3450,14 @@ 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:
@@ -3638,7 +3645,7 @@ packages:
}
dev: true
/@prisma/client/3.9.0_prisma@3.9.0:
/@prisma/client/3.9.0_prisma@4.0.0:
resolution:
{
integrity: sha512-PByWVI7l+KYUQL/pqR81363qhUh3LhYMIYn2czz5slbt3JC6aAk+Wm7PE9nalqSE6s4xSIYdHj6N0yTNqr86sA==,
@@ -3652,7 +3659,7 @@ packages:
optional: true
dependencies:
"@prisma/engines-version": 3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009
prisma: 3.9.0
prisma: 4.0.0
dev: false
/@prisma/engines-version/3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009:
@@ -3662,10 +3669,10 @@ packages:
}
dev: false
/@prisma/engines/3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009:
/@prisma/engines/3.16.0-49.da41d2bb3406da22087b849f0e911199ba4fbf11:
resolution:
{
integrity: sha512-qM+uJbkelB21bnK44gYE049YTHIjHysOuj0mj5U2gDGyNLfmiazlggzFPCgEjgme4U5YB2tYs6Z5Hq08Kl8pjA==,
integrity: sha512-u/rG4lDHALolWBLr3yebZ+N2qImp3SDMcu7bHNJuRDaYvYEXy/MqfNRNEgd9GoPsXL3gofYf0VzJf2AmCG3YVw==,
}
requiresBuild: true
dev: false
@@ -4751,6 +4758,35 @@ packages:
dev: true
optional: true
/@typescript-eslint/eslint-plugin/5.9.1_hrkuebk64jiu2ut2d2sm4oylnu:
resolution:
{
integrity: sha512-Xv9tkFlyD4MQGpJgTo6wqDqGvHIRmRgah/2Sjz1PUnJTawjHWIwBivUE9x0QtU2WVii9baYgavo/bHjrZJkqTw==,
}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
"@typescript-eslint/parser": ^5.0.0
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
typescript: "*"
peerDependenciesMeta:
typescript:
optional: true
dependencies:
"@typescript-eslint/experimental-utils": 5.9.1_hrkuebk64jiu2ut2d2sm4oylnu
"@typescript-eslint/scope-manager": 5.9.1
"@typescript-eslint/type-utils": 5.9.1_hrkuebk64jiu2ut2d2sm4oylnu
debug: 4.3.4
eslint: 7.32.0
functional-red-black-tree: 1.0.1
ignore: 5.2.0
regexpp: 3.2.0
semver: 7.3.7
tsutils: 3.21.0_typescript@4.6.3
typescript: 4.6.3
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/eslint-plugin/5.9.1_rvfvfrvgktle2hmlnfpjw2zp4u:
resolution:
{
@@ -4890,6 +4926,27 @@ packages:
- supports-color
dev: true
/@typescript-eslint/parser/5.28.0_typescript@4.6.3:
resolution:
{
integrity: sha512-ekqoNRNK1lAcKhZESN/PdpVsWbP9jtiNqzFWkp/yAUdZvJalw2heCYuqRmM5eUJSIYEkgq5sGOjq+ZqsLMjtRA==,
}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
typescript: "*"
peerDependenciesMeta:
typescript:
optional: true
dependencies:
"@typescript-eslint/scope-manager": 5.28.0
"@typescript-eslint/types": 5.28.0
"@typescript-eslint/typescript-estree": 5.28.0_typescript@4.6.3
debug: 4.3.4
typescript: 4.6.3
transitivePeerDependencies:
- supports-color
/@typescript-eslint/parser/5.9.1_hrkuebk64jiu2ut2d2sm4oylnu:
resolution:
{
@@ -4944,7 +5001,6 @@ packages:
dependencies:
"@typescript-eslint/types": 5.28.0
"@typescript-eslint/visitor-keys": 5.28.0
dev: true
/@typescript-eslint/scope-manager/5.9.1:
resolution:
@@ -5005,7 +5061,6 @@ packages:
integrity: sha512-2OOm8ZTOQxqkPbf+DAo8oc16sDlVR5owgJfKheBkxBKg1vAfw2JsSofH9+16VPlN9PWtv8Wzhklkqw3k/zCVxA==,
}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
/@typescript-eslint/types/5.9.1:
resolution:
@@ -5036,7 +5091,6 @@ packages:
typescript: 4.6.3
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/typescript-estree/5.9.1_typescript@4.6.3:
resolution:
@@ -5091,7 +5145,6 @@ packages:
dependencies:
"@typescript-eslint/types": 5.28.0
eslint-visitor-keys: 3.3.0
dev: true
/@typescript-eslint/visitor-keys/5.9.1:
resolution:
@@ -5846,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:
{
@@ -6113,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:
{
@@ -6172,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:
@@ -6294,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:
{
@@ -6659,6 +6744,7 @@ packages:
{
integrity: sha512-ksjJc/xVTQzT2q6trPja2qWynMEaGO36rDui2SiqLPYab9TmPgT8nIVcre/yscviPCSweUdCDGKe4MsQA9w1zQ==,
}
deprecated: core-js-pure@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js-pure.
requiresBuild: true
/core-util-is/1.0.3:
@@ -6806,7 +6892,6 @@ packages:
integrity: sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==,
}
engines: {node: ">= 12"}
dev: true
/data-urls/2.0.0:
resolution:
@@ -8304,34 +8389,6 @@ packages:
optionalDependencies:
source-map: 0.6.1
/eslint-config-next/12.0.7_typescript@4.6.3:
resolution:
{
integrity: sha512-kWOaym5qjyzR190zFKkZMaHetmiRORmzJiKML7Kr9CL213S6SwkrHHCEL58TRdpx0NA+HzrsFR9zgcV2pvV2Yg==,
}
peerDependencies:
eslint: ^7.23.0 || ^8.0.0
next: ">=10.2.0"
typescript: ">=3.3.1"
peerDependenciesMeta:
typescript:
optional: true
dependencies:
"@next/eslint-plugin-next": 12.0.7
"@rushstack/eslint-patch": 1.1.3
"@typescript-eslint/parser": 5.9.1_typescript@4.6.3
eslint-import-resolver-node: 0.3.6
eslint-import-resolver-typescript: 2.7.1_fkfqfehjtk7sk2efaqbgxsuasa
eslint-plugin-import: 2.26.0_oisyptfcq77gha3jnxd6iiraai
eslint-plugin-jsx-a11y: 6.5.1
eslint-plugin-react: 7.30.0
eslint-plugin-react-hooks: 4.5.0
typescript: 4.6.3
transitivePeerDependencies:
- eslint-import-resolver-webpack
- supports-color
dev: false
/eslint-config-next/12.2.0_hrkuebk64jiu2ut2d2sm4oylnu:
resolution:
{
@@ -8360,16 +8417,83 @@ packages:
- supports-color
dev: true
/eslint-config-prettier/8.3.0:
/eslint-config-next/12.2.0_typescript@4.6.3:
resolution:
{
integrity: sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==,
integrity: sha512-QWzNegadFXjQ0h3hixnLacRM9Kot85vQefyNsA8IeOnERZMz0Gvays1W6DMCjSxJbnCwuWaMXj9DCpar5IahRA==,
}
peerDependencies:
eslint: ^7.23.0 || ^8.0.0
typescript: ">=3.3.1"
peerDependenciesMeta:
typescript:
optional: true
dependencies:
"@next/eslint-plugin-next": 12.2.0
"@rushstack/eslint-patch": 1.1.3
"@typescript-eslint/parser": 5.28.0_typescript@4.6.3
eslint-import-resolver-node: 0.3.6
eslint-import-resolver-typescript: 2.7.1_fkfqfehjtk7sk2efaqbgxsuasa
eslint-plugin-import: 2.26.0_xtdmsd4adcznatktegie3poqce
eslint-plugin-jsx-a11y: 6.5.1
eslint-plugin-react: 7.30.0
eslint-plugin-react-hooks: 4.5.0
typescript: 4.6.3
transitivePeerDependencies:
- eslint-import-resolver-webpack
- 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:
{
integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==,
}
hasBin: true
peerDependencies:
eslint: ">=7.0.0"
dev: false
/eslint-config-prettier/8.5.0_eslint@7.32.0:
resolution:
{
integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==,
}
hasBin: true
peerDependencies:
eslint: ">=7.0.0"
dependencies:
eslint: 7.32.0
dev: true
/eslint-import-resolver-node/0.3.6:
resolution:
{
@@ -8392,14 +8516,13 @@ packages:
eslint-plugin-import: "*"
dependencies:
debug: 4.3.4
eslint-plugin-import: 2.26.0_oisyptfcq77gha3jnxd6iiraai
eslint-plugin-import: 2.26.0_xtdmsd4adcznatktegie3poqce
glob: 7.2.0
is-glob: 4.0.3
resolve: 1.22.0
tsconfig-paths: 3.14.1
transitivePeerDependencies:
- supports-color
dev: false
/eslint-import-resolver-typescript/2.7.1_hpmu7kn6tcn2vnxpfzvv33bxmy:
resolution:
@@ -8422,36 +8545,6 @@ packages:
- supports-color
dev: true
/eslint-module-utils/2.7.3_dbnyosdljuntx5ukba4qoruhni:
resolution:
{
integrity: sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==,
}
engines: {node: ">=4"}
peerDependencies:
"@typescript-eslint/parser": "*"
eslint-import-resolver-node: "*"
eslint-import-resolver-typescript: "*"
eslint-import-resolver-webpack: "*"
peerDependenciesMeta:
"@typescript-eslint/parser":
optional: true
eslint-import-resolver-node:
optional: true
eslint-import-resolver-typescript:
optional: true
eslint-import-resolver-webpack:
optional: true
dependencies:
"@typescript-eslint/parser": 5.9.1_typescript@4.6.3
debug: 3.2.7
eslint-import-resolver-node: 0.3.6
eslint-import-resolver-typescript: 2.7.1_fkfqfehjtk7sk2efaqbgxsuasa
find-up: 2.1.0
transitivePeerDependencies:
- supports-color
dev: false
/eslint-module-utils/2.7.3_pbmiczca3qpqvnkfcriol7sq7u:
resolution:
{
@@ -8473,16 +8566,15 @@ packages:
eslint-import-resolver-webpack:
optional: true
dependencies:
"@typescript-eslint/parser": 5.28.0_hrkuebk64jiu2ut2d2sm4oylnu
"@typescript-eslint/parser": 5.28.0_typescript@4.6.3
debug: 3.2.7
eslint-import-resolver-node: 0.3.6
eslint-import-resolver-typescript: 2.7.1_hpmu7kn6tcn2vnxpfzvv33bxmy
eslint-import-resolver-typescript: 2.7.1_fkfqfehjtk7sk2efaqbgxsuasa
find-up: 2.1.0
transitivePeerDependencies:
- supports-color
dev: true
/eslint-plugin-import/2.26.0_oisyptfcq77gha3jnxd6iiraai:
/eslint-plugin-import/2.26.0_xtdmsd4adcznatktegie3poqce:
resolution:
{
integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==,
@@ -8495,13 +8587,13 @@ packages:
"@typescript-eslint/parser":
optional: true
dependencies:
"@typescript-eslint/parser": 5.9.1_typescript@4.6.3
"@typescript-eslint/parser": 5.28.0_typescript@4.6.3
array-includes: 3.1.5
array.prototype.flat: 1.3.0
debug: 2.6.9
doctrine: 2.1.0
eslint-import-resolver-node: 0.3.6
eslint-module-utils: 2.7.3_dbnyosdljuntx5ukba4qoruhni
eslint-module-utils: 2.7.3_pbmiczca3qpqvnkfcriol7sq7u
has: 1.0.3
is-core-module: 2.8.1
is-glob: 4.0.3
@@ -8513,7 +8605,6 @@ packages:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
dev: false
/eslint-plugin-import/2.26.0_zhtk6rij7obli3ams3sxis7j7e:
resolution:
@@ -9176,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:
@@ -9388,7 +9478,6 @@ packages:
engines: {node: ">=12.20.0"}
dependencies:
fetch-blob: 3.1.5
dev: true
/forwarded/0.2.0:
resolution:
@@ -12832,7 +12921,6 @@ packages:
integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==,
}
engines: {node: ">=10.5.0"}
dev: true
/node-fetch/3.2.3:
resolution:
@@ -12844,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:
@@ -13911,16 +13998,16 @@ packages:
- supports-color
dev: true
/prisma/3.9.0:
/prisma/4.0.0:
resolution:
{
integrity: sha512-KppIukAgJH6o4q9CRYQUqpJUFt8XOK+5eTlv9W+w/SnaSzar+zbT7RCxspCkoGGVSASAQDMYWSKm3QON/o5ENg==,
integrity: sha512-Dtsar03XpCBkcEb2ooGWO/WcgblDTLzGhPcustbehwlFXuTMliMDRzXsfygsgYwQoZnAUKRd1rhpvBNEUziOVw==,
}
engines: {node: ">=12.6"}
engines: {node: ">=14.17"}
hasBin: true
requiresBuild: true
dependencies:
"@prisma/engines": 3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009
"@prisma/engines": 3.16.0-49.da41d2bb3406da22087b849f0e911199ba4fbf11
dev: false
/process-nextick-args/2.0.1:
@@ -16385,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:
{
@@ -16898,7 +16993,6 @@ packages:
integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==,
}
engines: {node: ">= 8"}
dev: true
/webidl-conversions/5.0.0:
resolution:
@@ -17072,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:
{
@@ -17124,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:
{