Compare commits
10 Commits
@blitzjs/c
...
@blitzjs/a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0959a11fc6 | ||
|
|
4545912936 | ||
|
|
55a43ce1f8 | ||
|
|
1569bd53e0 | ||
|
|
8e5903c0fa | ||
|
|
11b548edee | ||
|
|
ceb7db274f | ||
|
|
0ebdf3bc93 | ||
|
|
1b798d9a03 | ||
|
|
758ccbbbe5 |
@@ -3733,6 +3733,15 @@
|
||||
"doc",
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "joneskj55",
|
||||
"name": "Kevin Jones",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/20748598?v=4",
|
||||
"profile": "https://kevinjones.engineer",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
}
|
||||
],
|
||||
"contributorsPerLine": 7,
|
||||
|
||||
6
.changeset/afraid-ears-repair.md
Normal file
6
.changeset/afraid-ears-repair.md
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
"blitz": patch
|
||||
"@blitzjs/generator": patch
|
||||
---
|
||||
|
||||
Upgrade `tslog` to the latest version
|
||||
6
.changeset/heavy-students-buy.md
Normal file
6
.changeset/heavy-students-buy.md
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
"@blitzjs/auth": minor
|
||||
"@blitzjs/rpc": minor
|
||||
---
|
||||
|
||||
maybe fix anon session CSRF issue + add ability to customize anon session expiry time
|
||||
7
.changeset/itchy-cups-double.md
Normal file
7
.changeset/itchy-cups-double.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
"blitz": patch
|
||||
"@blitzjs/rpc": patch
|
||||
---
|
||||
|
||||
Add an opt-in GET request support to RPC specification by exporting a `config` object that has the `httpMethod` property.
|
||||
from `query` files.
|
||||
6
.changeset/light-squids-draw.md
Normal file
6
.changeset/light-squids-draw.md
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
"blitz": patch
|
||||
"@blitzjs/generator": patch
|
||||
---
|
||||
|
||||
Fix `cannot find module db error` in JavaScript template. Replace requiring the config using `esbuild` with parsing using `jscodeshift` to get the `cliConfig` values. Added logic to find the `blitz-server` file in `src` directory
|
||||
5
.changeset/odd-bears-run.md
Normal file
5
.changeset/odd-bears-run.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@blitzjs/next": minor
|
||||
---
|
||||
|
||||
Change setupBlitzServer logger config to be optional. Will default to BlitzLogger
|
||||
@@ -48,6 +48,7 @@
|
||||
},
|
||||
"changesets": [
|
||||
"afraid-dancers-juggle",
|
||||
"afraid-ears-repair",
|
||||
"big-phones-bow",
|
||||
"blue-flowers-peel",
|
||||
"blue-pigs-tan",
|
||||
@@ -117,6 +118,7 @@
|
||||
"healthy-rice-shout",
|
||||
"heavy-apes-judge",
|
||||
"heavy-cobras-own",
|
||||
"heavy-students-buy",
|
||||
"hip-buttons-dance",
|
||||
"honest-candles-yawn",
|
||||
"honest-cherries-push",
|
||||
@@ -125,6 +127,7 @@
|
||||
"hot-drinks-approve",
|
||||
"hungry-baboons-swim",
|
||||
"hungry-pens-collect",
|
||||
"itchy-cups-double",
|
||||
"itchy-houses-marry",
|
||||
"itchy-spoons-tan",
|
||||
"khaki-ducks-cheer",
|
||||
@@ -135,6 +138,7 @@
|
||||
"lemon-pillows-switch",
|
||||
"lemon-seas-push",
|
||||
"light-donkeys-double",
|
||||
"light-squids-draw",
|
||||
"little-pears-ring",
|
||||
"long-bees-hope",
|
||||
"long-dancers-jog",
|
||||
@@ -162,6 +166,7 @@
|
||||
"ninety-lies-press",
|
||||
"ninety-pets-heal",
|
||||
"ninety-rice-tickle",
|
||||
"odd-bears-run",
|
||||
"olive-bees-buy",
|
||||
"olive-feet-rhyme",
|
||||
"olive-kings-invent",
|
||||
@@ -195,6 +200,7 @@
|
||||
"shy-olives-hang",
|
||||
"shy-pumpkins-try",
|
||||
"silent-colts-reply",
|
||||
"silent-lies-run",
|
||||
"silly-apricots-share",
|
||||
"silly-shoes-agree",
|
||||
"six-apricots-kick",
|
||||
@@ -217,6 +223,7 @@
|
||||
"spotty-peas-hope",
|
||||
"spotty-zoos-film",
|
||||
"stale-jobs-drum",
|
||||
"stale-parents-yawn",
|
||||
"strong-apes-reply",
|
||||
"strong-keys-lie",
|
||||
"stupid-walls-sell",
|
||||
|
||||
5
.changeset/silent-lies-run.md
Normal file
5
.changeset/silent-lies-run.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"blitz": patch
|
||||
---
|
||||
|
||||
Fix `useSession` hook by exporting `enhancePrisma` from the server entry point instead of server
|
||||
5
.changeset/stale-parents-yawn.md
Normal file
5
.changeset/stale-parents-yawn.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"blitz": patch
|
||||
---
|
||||
|
||||
Include resolvers in `src` directory in blitz console
|
||||
@@ -6,7 +6,7 @@
|
||||
<img alt="" src="https://img.shields.io/badge/Join%20our%20community-6700EB.svg?style=for-the-badge&labelColor=000000&logoWidth=20&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQ9SURBVHgB7d3dVdtAEIbhcSpICUoH0IEogQqSVBBSAU4FSSpIOoAORAfQgSghHXzZ1U/YcMD4R9rZmf2ec3y448LyiNf27iLiGIAmPLrweC9Un3DhrzG6EarLNP09nlwJ1SOZ/lQr5N80/S/p2QMVCBf5N17XCfm1Y/rBHqjAG9PPHvBsz+mf9WAP+HLA9M/YA14cOP2payH7jpj+VCtk1wnTP+vj7xCy6cTpn7EHLMLp059iD1iD8eveJbVCNsSLheX1YA/YgOWnf8YeKB3Wmf7Ud6Fy4f/FHmtpxbl3YlC4MJ/Cj0bWdwPnPbARg+L0S54XQHS32WwuxClzd4CM0z9rPfeAuTtA5ulPXYQ7wZ04Y+oOoDD9KZc9YOoOoDj9s4dwFzgXR6w1wIPoOvPWA9buAHEJ173o3gWiy3AnuBUHLEbgmYwvAk1/wuM8vAgexThzbwPDkx7/DHwVXfFOxP2GmsKd4Ab6zPeAyU8CI7AHFmH2BRCBPXAyk18GzUrqAXCTiR4ssyj0VFw/oCU8+e+RZ33AWz6KMaYbIIWxB+JSLs1bsbkeMN0AqakHvoku9oA2sAfqBvbAQdw0QArsgb25aYBUQT3QgT2gB+yBuqGcHij2UCqXDZACe2Anlw2QYg/QAOyBuoE98CL3DZDCuK4/rh/Q7oGL6U+TOvcNkJoijN8X1C48+T+g75eQDrAH/qmqAVJgDwyqaoAUe4AGYA/UDZX3QLUNkEIZPRCd5+6BahsgVUgPROwBTSijB7jpVAvGHriHvmw9wAZ4BpX1ABvgmakHtPcbRuwBTWAPULgAV9D/jKDY9YRvwvgEaurD44uQHvAol7qBW7WKluVtIHiUS7GyvA0s6CiXDnxrpQfsgbqBS7GKk/2jYHCrVlGyfxTMrVo0ALdq1Q3sgSKofh0M9oA61a+D2QM0AHugbmAPqClmSRjK2apVVQ8UsySsoK1aHdgDesCtWnUDeyCrIpeFg1u3sylyWTi3btMA7IG6gT2wuuK3hoE9sKrit4YVslWLPaAN7IG6ocKt2zmY2h4O9sDiTG0PZw/QANy6XTewBxZj9ogYVHy025LMHhEz9cBn0We6B0yfERReBLfhx0/R1YQHPx/QBPbA0VwcEwf2wNFcHBPHHjiem3MC2QPHcXdSaJjA+KfgTPQ8hhfjBzHC40mhlzJ+Xq9lK4a4PCs43AVaGTed5mZq+iOXZwWHi3AnOj2wFWNcnxYe7gTxLtBKHuamP/J+Wnh8a5irB7ZC5Yk9gPX1QuXC+usHWqGyhYvUYR0a7zboUOFCNVhnk0krZAOW7wFOvzXhom2xnEbIHizTA1wEYhWW6YFGyC6c1gOcfg9wfA80Qj7g8B7g9HuCww+haIR8wf49wOn3Cvv9k8tGyC/s7gFOv3fY3QONkH+v9MBWqB7PeqDn9FcIT//kcitUn6kHOu/T/xfWzlQy3dEHhwAAAABJRU5ErkJggg==">
|
||||
</a>
|
||||
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
||||
<a aria-label="All Contributors" href="#contributors-"><img alt="" src="https://img.shields.io/badge/all_contributors-395-17BB8A.svg?style=for-the-badge&labelColor=000000"></a>
|
||||
<a aria-label="All Contributors" href="#contributors-"><img alt="" src="https://img.shields.io/badge/all_contributors-396-17BB8A.svg?style=for-the-badge&labelColor=000000"></a>
|
||||
<!-- ALL-CONTRIBUTORS-BADGE:END -->
|
||||
<a aria-label="License" href="https://github.com/blitz-js/blitz/blob/main/LICENSE">
|
||||
<img alt="" src="https://img.shields.io/npm/l/blitz.svg?style=for-the-badge&labelColor=000000&color=blue">
|
||||
@@ -730,6 +730,7 @@ Thanks to these wonderful people ([emoji key](https://allcontributors.org/docs/e
|
||||
<td align="center"><a href="https://github.com/corydeppen"><img src="https://avatars.githubusercontent.com/u/313264?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Cory Deppen</b></sub></a><br /><a href="https://github.com/blitz-js/blitz/commits?author=corydeppen" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/oloost"><img src="https://avatars.githubusercontent.com/u/72395941?v=4?s=100" width="100px;" alt=""/><br /><sub><b>oloost</b></sub></a><br /><a href="https://github.com/blitz-js/blitz/commits?author=oloost" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/janvennemann"><img src="https://avatars.githubusercontent.com/u/1406024?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jan Vennemann</b></sub></a><br /><a href="https://github.com/blitz-js/blitz/commits?author=janvennemann" title="Documentation">📖</a> <a href="https://github.com/blitz-js/blitz/commits?author=janvennemann" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://kevinjones.engineer"><img src="https://avatars.githubusercontent.com/u/20748598?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kevin Jones</b></sub></a><br /><a href="https://github.com/blitz-js/blitz/commits?author=joneskj55" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
"@blitzjs/rpc": "workspace:*",
|
||||
"@hookform/resolvers": "2.8.8",
|
||||
"@prisma/client": "4.0.0",
|
||||
"blitz": "workspace:2.0.0-beta.14",
|
||||
"blitz": "workspace:2.0.0-beta.16",
|
||||
"next": "12.2.5",
|
||||
"openid-client": "5.1.8",
|
||||
"prisma": "4.0.0",
|
||||
|
||||
@@ -11,3 +11,7 @@ export default async function getCurrentUser(_ = null, { session }: Ctx) {
|
||||
|
||||
return user
|
||||
}
|
||||
|
||||
export const config = {
|
||||
httpMethod: "GET",
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
"@blitzjs/rpc": "workspace:*",
|
||||
"@hookform/resolvers": "2.8.8",
|
||||
"@prisma/client": "4.0.0",
|
||||
"blitz": "workspace:2.0.0-beta.14",
|
||||
"blitz": "workspace:2.0.0-beta.16",
|
||||
"next": "12.2.5",
|
||||
"prisma": "4.0.0",
|
||||
"react": "18.2.0",
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"@blitzjs/config": "workspace:*",
|
||||
"@blitzjs/next": "workspace:*",
|
||||
"@prisma/client": "4.0.0",
|
||||
"blitz": "workspace:2.0.0-beta.14",
|
||||
"blitz": "workspace:2.0.0-beta.16",
|
||||
"lowdb": "3.0.0",
|
||||
"next": "12.2.5",
|
||||
"prisma": "4.0.0",
|
||||
|
||||
16
integration-tests/rpc/app/queries/getBasicWithGET.js
Normal file
16
integration-tests/rpc/app/queries/getBasicWithGET.js
Normal file
@@ -0,0 +1,16 @@
|
||||
if (typeof window !== "undefined") {
|
||||
throw new Error("This should not be loaded on the client")
|
||||
}
|
||||
|
||||
export default async function getBasicWithGET() {
|
||||
if (typeof window !== "undefined") {
|
||||
throw new Error("This should not be loaded on the client")
|
||||
}
|
||||
|
||||
global.basic ??= "basic-result"
|
||||
return global.basic
|
||||
}
|
||||
|
||||
export const config = {
|
||||
httpMethod: "GET",
|
||||
}
|
||||
@@ -9,13 +9,10 @@ import {
|
||||
nextBuild,
|
||||
nextStart,
|
||||
nextExport,
|
||||
getPageFileFromBuildManifest,
|
||||
getPageFileFromPagesManifest,
|
||||
} from "../../utils/next-test-utils"
|
||||
|
||||
// jest.setTimeout(1000 * 60 * 2)
|
||||
const appDir = join(__dirname, "../")
|
||||
const nextConfig = join(appDir, "next.config.js")
|
||||
let appPort
|
||||
let mode
|
||||
let app
|
||||
@@ -33,17 +30,6 @@ function runTests(dev = false) {
|
||||
5000 * 60 * 2,
|
||||
)
|
||||
|
||||
it(
|
||||
"returns 404 for GET",
|
||||
async () => {
|
||||
const res = await fetchViaHTTP(appPort, "/api/rpc/getBasic", null, {
|
||||
method: "GET",
|
||||
})
|
||||
expect(res.status).toEqual(404)
|
||||
},
|
||||
5000 * 60 * 2,
|
||||
)
|
||||
|
||||
it(
|
||||
"requires params",
|
||||
async () => {
|
||||
@@ -58,6 +44,71 @@ function runTests(dev = false) {
|
||||
5000 * 60 * 2,
|
||||
)
|
||||
|
||||
it(
|
||||
"GET - returns 200 only when enabled",
|
||||
async () => {
|
||||
const res = await fetchViaHTTP(
|
||||
appPort,
|
||||
"/api/rpc/getBasicWithGET?params=%7B%7D&meta=%7B%7D",
|
||||
null,
|
||||
{
|
||||
method: "GET",
|
||||
},
|
||||
)
|
||||
expect(res.status).toEqual(200)
|
||||
},
|
||||
5000 * 60 * 2,
|
||||
)
|
||||
|
||||
it(
|
||||
"GET - returns 404 otherwise",
|
||||
async () => {
|
||||
const res = await fetchViaHTTP(
|
||||
appPort,
|
||||
"/api/rpc/getBasic?params=%7B%7D&meta=%7B%7D",
|
||||
null,
|
||||
{
|
||||
method: "GET",
|
||||
},
|
||||
)
|
||||
expect(res.status).toEqual(404)
|
||||
},
|
||||
5000 * 60 * 2,
|
||||
)
|
||||
|
||||
it(
|
||||
"query works - GET",
|
||||
async () => {
|
||||
const res = await fetchViaHTTP(
|
||||
appPort,
|
||||
"/api/rpc/getBasicWithGET?params=%7B%7D&meta=%7B%7D",
|
||||
null,
|
||||
{
|
||||
method: "GET",
|
||||
},
|
||||
)
|
||||
const json = await res.json()
|
||||
expect(json).toEqual({result: "basic-result", error: null, meta: {}})
|
||||
expect(res.status).toEqual(200)
|
||||
},
|
||||
5000 * 60 * 2,
|
||||
)
|
||||
|
||||
it(
|
||||
"requires params - GET",
|
||||
async () => {
|
||||
const res = await fetchViaHTTP(appPort, "/api/rpc/getBasicWithGET", null, {
|
||||
method: "GET",
|
||||
})
|
||||
const json = await res.json()
|
||||
expect(res.status).toEqual(400)
|
||||
expect(json.error.message).toBe(
|
||||
"Request query is missing the required `params` and `meta` keys",
|
||||
)
|
||||
},
|
||||
5000 * 60 * 2,
|
||||
)
|
||||
|
||||
it(
|
||||
"query works",
|
||||
async () => {
|
||||
|
||||
@@ -1,5 +1,26 @@
|
||||
# @blitzjs/auth
|
||||
|
||||
## 2.0.0-beta.16
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- 55a43ce1: maybe fix anon session CSRF issue + add ability to customize anon session expiry time
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1569bd53]
|
||||
- Updated dependencies [ceb7db27]
|
||||
- Updated dependencies [8e5903c0]
|
||||
- Updated dependencies [45459129]
|
||||
- blitz@2.0.0-beta.16
|
||||
|
||||
## 2.0.0-beta.15
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1b798d9a]
|
||||
- blitz@2.0.0-beta.15
|
||||
|
||||
## 2.0.0-beta.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@blitzjs/auth",
|
||||
"version": "2.0.0-beta.14",
|
||||
"version": "2.0.0-beta.16",
|
||||
"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-beta.14",
|
||||
"blitz": "2.0.0-beta.16",
|
||||
"cookie": "0.4.1",
|
||||
"cookie-session": "2.0.0",
|
||||
"debug": "4.3.3",
|
||||
@@ -40,7 +40,7 @@
|
||||
"url": "0.11.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@blitzjs/config": "workspace:2.0.0-beta.14",
|
||||
"@blitzjs/config": "workspace:2.0.0-beta.16",
|
||||
"@testing-library/react": "13.0.0",
|
||||
"@testing-library/react-hooks": "7.0.2",
|
||||
"@types/cookie": "0.4.1",
|
||||
|
||||
@@ -116,10 +116,17 @@ export const getPublicDataStore = (): PublicDataStore => {
|
||||
return (window as any).__publicDataStore
|
||||
}
|
||||
|
||||
export const getAntiCSRFToken = () => {
|
||||
// because safari automatically deletes non-httponly cookies after 7 days
|
||||
export const backupAntiCSRFTokenToLocalStorage = () => {
|
||||
const cookieValue = readCookie(COOKIE_CSRF_TOKEN())
|
||||
if (cookieValue) {
|
||||
localStorage.setItem(LOCALSTORAGE_CSRF_TOKEN(), cookieValue)
|
||||
}
|
||||
}
|
||||
|
||||
export const getAntiCSRFToken = () => {
|
||||
const cookieValue = readCookie(COOKIE_CSRF_TOKEN())
|
||||
if (cookieValue) {
|
||||
return cookieValue
|
||||
} else {
|
||||
return localStorage.getItem(LOCALSTORAGE_CSRF_TOKEN())
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
import {SessionConfig} from "./shared/types"
|
||||
import {AuthPluginOptions} from "./server"
|
||||
import {SessionConfigMethods} from "./shared"
|
||||
|
||||
declare global {
|
||||
var sessionConfig: SessionConfig
|
||||
var sessionConfig: AuthPluginOptions & SessionConfigMethods
|
||||
var __BLITZ_SESSION_COOKIE_PREFIX: string | undefined
|
||||
var __BLITZ_SUSPENSE_ENABLED: boolean
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import {getSession} from "./auth-sessions"
|
||||
interface SessionConfigOptions {
|
||||
cookiePrefix?: string
|
||||
sessionExpiryMinutes?: number
|
||||
anonSessionExpiryMinutes?: number
|
||||
method?: "essential" | "advanced"
|
||||
sameSite?: "none" | "lax" | "strict"
|
||||
secureCookies?: boolean
|
||||
@@ -69,13 +70,14 @@ export const PrismaStorage = <Client extends PrismaClientWithSession>(
|
||||
|
||||
const defaultConfig_: SessionConfigOptions = {
|
||||
sessionExpiryMinutes: 30 * 24 * 60, // Sessions expire after 30 days of being idle
|
||||
anonSessionExpiryMinutes: 5 * 365 * 24 * 60, // Sessions expire after 5 years of being idle
|
||||
method: "essential",
|
||||
sameSite: "lax",
|
||||
publicDataKeysToSyncAcrossSessions: ["role", "roles"],
|
||||
secureCookies: !process.env.DISABLE_SECURE_COOKIES && process.env.NODE_ENV === "production",
|
||||
}
|
||||
|
||||
interface AuthPluginOptions extends Partial<SessionConfigOptions>, IsAuthorized {
|
||||
export interface AuthPluginOptions extends Partial<SessionConfigOptions>, IsAuthorized {
|
||||
storage: SessionConfigMethods
|
||||
}
|
||||
|
||||
|
||||
@@ -690,7 +690,10 @@ async function createNewSession(
|
||||
const anonymousSessionToken = createAnonymousSessionToken(payload)
|
||||
const publicDataToken = createPublicDataToken(args.publicData)
|
||||
|
||||
const expiresAt = addYears(new Date(), 30)
|
||||
const expiresAt = addMinutes(
|
||||
new Date(),
|
||||
global.sessionConfig.anonSessionExpiryMinutes as number,
|
||||
)
|
||||
setAnonymousSessionCookie(req, res, anonymousSessionToken, expiresAt)
|
||||
setCSRFCookie(req, res, antiCSRFToken, expiresAt)
|
||||
setPublicDataCookie(req, res, publicDataToken, expiresAt)
|
||||
|
||||
@@ -50,17 +50,6 @@ export interface SessionConfigMethods {
|
||||
deleteSession: (handle: string) => Promise<SessionModel | undefined>
|
||||
}
|
||||
|
||||
export interface SessionConfig extends SessionConfigMethods {
|
||||
cookiePrefix?: string
|
||||
sessionExpiryMinutes?: number
|
||||
method?: "essential" | "advanced"
|
||||
sameSite?: "none" | "lax" | "strict"
|
||||
secureCookies?: boolean
|
||||
domain?: string
|
||||
publicDataKeysToSyncAcrossSessions?: string[]
|
||||
isAuthorized: (data: {ctx: BlitzCtx; args: any}) => boolean
|
||||
}
|
||||
|
||||
export interface SessionContextBase {
|
||||
$handle: string | null
|
||||
$publicData: unknown
|
||||
|
||||
@@ -1,5 +1,23 @@
|
||||
# @blitzjs/next
|
||||
|
||||
## 2.0.0-beta.16
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- 11b548ed: Change setupBlitzServer logger config to be optional. Will default to BlitzLogger
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [55a43ce1]
|
||||
- Updated dependencies [ceb7db27]
|
||||
- @blitzjs/rpc@2.0.0-beta.16
|
||||
|
||||
## 2.0.0-beta.15
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @blitzjs/rpc@2.0.0-beta.15
|
||||
|
||||
## 2.0.0-beta.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@blitzjs/next",
|
||||
"version": "2.0.0-beta.14",
|
||||
"version": "2.0.0-beta.16",
|
||||
"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-beta.14",
|
||||
"@blitzjs/rpc": "2.0.0-beta.16",
|
||||
"@tanstack/react-query": "4.0.10",
|
||||
"@types/hoist-non-react-statics": "3.3.1",
|
||||
"debug": "4.3.3",
|
||||
@@ -34,7 +34,7 @@
|
||||
"supports-color": "8.1.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@blitzjs/config": "workspace:2.0.0-beta.14",
|
||||
"@blitzjs/config": "workspace:2.0.0-beta.16",
|
||||
"@testing-library/dom": "8.13.0",
|
||||
"@testing-library/jest-dom": "5.16.3",
|
||||
"@testing-library/react": "13.0.0",
|
||||
@@ -44,7 +44,7 @@
|
||||
"@types/react": "18.0.17",
|
||||
"@types/react-dom": "17.0.14",
|
||||
"@types/testing-library__react-hooks": "4.0.0",
|
||||
"blitz": "2.0.0-beta.14",
|
||||
"blitz": "2.0.0-beta.16",
|
||||
"cross-spawn": "7.0.3",
|
||||
"find-up": "4.1.0",
|
||||
"next": "12.2.5",
|
||||
|
||||
@@ -52,7 +52,7 @@ export type NextApiHandler<TResult> = (
|
||||
type SetupBlitzOptions = {
|
||||
plugins: BlitzServerPlugin<RequestMiddleware, Ctx>[]
|
||||
onError?: (err: Error) => void
|
||||
logger: ReturnType<typeof BlitzLogger>
|
||||
logger?: ReturnType<typeof BlitzLogger>
|
||||
}
|
||||
|
||||
export type Redirect =
|
||||
@@ -131,7 +131,7 @@ const prefetchQueryFactory = (
|
||||
}
|
||||
|
||||
export const setupBlitzServer = ({plugins, onError, logger}: SetupBlitzOptions) => {
|
||||
initializeLogger(logger)
|
||||
initializeLogger(logger ?? BlitzLogger())
|
||||
|
||||
const middlewares = plugins.flatMap((p) => p.requestMiddlewares)
|
||||
const contextMiddleware = plugins.flatMap((p) => p.contextMiddleware).filter(Boolean)
|
||||
|
||||
@@ -1,5 +1,24 @@
|
||||
# @blitzjs/rpc
|
||||
|
||||
## 2.0.0-beta.16
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- 55a43ce1: maybe fix anon session CSRF issue + add ability to customize anon session expiry time
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- ceb7db27: Add an opt-in GET request support to RPC specification by exporting a `config` object that has the `httpMethod` property.
|
||||
from `query` files.
|
||||
- Updated dependencies [55a43ce1]
|
||||
- @blitzjs/auth@2.0.0-beta.16
|
||||
|
||||
## 2.0.0-beta.15
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @blitzjs/auth@2.0.0-beta.15
|
||||
|
||||
## 2.0.0-beta.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@blitzjs/rpc",
|
||||
"version": "2.0.0-beta.14",
|
||||
"version": "2.0.0-beta.16",
|
||||
"scripts": {
|
||||
"build": "unbuild",
|
||||
"predev": "wait-on -d 400 ../blitz/dist/index-server.d.ts && wait-on -d 400 ../blitz-auth/dist/index-browser.d.ts",
|
||||
@@ -20,7 +20,8 @@
|
||||
"dist/**"
|
||||
],
|
||||
"dependencies": {
|
||||
"@blitzjs/auth": "2.0.0-beta.14",
|
||||
"@blitzjs/auth": "2.0.0-beta.16",
|
||||
"@swc/core": "1.3.7",
|
||||
"@tanstack/react-query": "4.0.10",
|
||||
"b64-lite": "1.4.0",
|
||||
"bad-behavior": "1.0.1",
|
||||
@@ -30,11 +31,11 @@
|
||||
"supports-color": "8.1.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@blitzjs/config": "workspace:2.0.0-beta.14",
|
||||
"@blitzjs/config": "workspace:2.0.0-beta.16",
|
||||
"@types/debug": "4.1.7",
|
||||
"@types/react": "18.0.17",
|
||||
"@types/react-dom": "17.0.14",
|
||||
"blitz": "2.0.0-beta.14",
|
||||
"blitz": "2.0.0-beta.16",
|
||||
"next": "12.2.5",
|
||||
"react": "18.2.0",
|
||||
"react-dom": "18.2.0",
|
||||
|
||||
@@ -4,9 +4,11 @@ import {deserialize, serialize} from "superjson"
|
||||
import {SuperJSONResult} from "superjson/dist/types"
|
||||
import {CSRFTokenMismatchError, isServer} from "blitz"
|
||||
import {getQueryKeyFromUrlAndParams, getQueryClient} from "./react-query-utils"
|
||||
import {stringify} from "superjson"
|
||||
import {
|
||||
getAntiCSRFToken,
|
||||
getPublicDataStore,
|
||||
backupAntiCSRFTokenToLocalStorage,
|
||||
HEADER_CSRF,
|
||||
HEADER_CSRF_ERROR,
|
||||
HEADER_PUBLIC_DATA_TOKEN,
|
||||
@@ -23,6 +25,7 @@ export interface BuildRpcClientParams {
|
||||
resolverName: string
|
||||
resolverType: ResolverType
|
||||
routePath: string
|
||||
httpMethod: string
|
||||
}
|
||||
|
||||
export interface RpcOptions {
|
||||
@@ -54,9 +57,10 @@ export function __internal_buildRpcClient({
|
||||
resolverName,
|
||||
resolverType,
|
||||
routePath,
|
||||
httpMethod,
|
||||
}: BuildRpcClientParams): RpcClient {
|
||||
const fullRoutePath = normalizeApiRoute("/api/rpc" + routePath)
|
||||
|
||||
const routePathURL = new URL(fullRoutePath, window.location.origin)
|
||||
const httpClient: RpcClientBase = async (params, opts = {}, signal = undefined) => {
|
||||
const debug = (await import("debug")).default("blitz:rpc")
|
||||
if (!opts.fromQueryHook && !opts.fromInvoke) {
|
||||
@@ -93,23 +97,32 @@ export function __internal_buildRpcClient({
|
||||
serialized = serialize(params)
|
||||
}
|
||||
|
||||
if (httpMethod === "GET") {
|
||||
routePathURL.searchParams.set("params", stringify(serialized.json))
|
||||
routePathURL.searchParams.set("meta", stringify(serialized.meta))
|
||||
}
|
||||
|
||||
const promise = window
|
||||
.fetch(fullRoutePath, {
|
||||
method: "POST",
|
||||
.fetch(routePathURL, {
|
||||
method: httpMethod,
|
||||
headers,
|
||||
credentials: "include",
|
||||
redirect: "follow",
|
||||
body: JSON.stringify({
|
||||
params: serialized.json,
|
||||
meta: {
|
||||
params: serialized.meta,
|
||||
},
|
||||
}),
|
||||
body:
|
||||
httpMethod === "POST"
|
||||
? JSON.stringify({
|
||||
params: serialized.json,
|
||||
meta: {
|
||||
params: serialized.meta,
|
||||
},
|
||||
})
|
||||
: undefined,
|
||||
signal,
|
||||
})
|
||||
.then(async (response) => {
|
||||
debug("Received request for", routePath)
|
||||
if (response.headers) {
|
||||
backupAntiCSRFTokenToLocalStorage()
|
||||
if (response.headers.get(HEADER_PUBLIC_DATA_TOKEN)) {
|
||||
getPublicDataStore().updateState()
|
||||
debug("Public data updated")
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import {assert, baseLogger, Ctx, newLine, prettyMs} from "blitz"
|
||||
import {assert, baseLogger, Ctx, newLine, prettyMs, ResolverConfig} from "blitz"
|
||||
import {NextApiRequest, NextApiResponse} from "next"
|
||||
import {deserialize, serialize as superjsonSerialize} from "superjson"
|
||||
import {deserialize, serialize as superjsonSerialize, parse} from "superjson"
|
||||
import {resolve} from "path"
|
||||
import chalk from "chalk"
|
||||
|
||||
@@ -14,6 +14,10 @@ function isObject(value: unknown): value is Record<string | symbol, unknown> {
|
||||
return typeof value === "object" && value !== null
|
||||
}
|
||||
|
||||
const defaultConfig: ResolverConfig = {
|
||||
httpMethod: "POST",
|
||||
}
|
||||
|
||||
function getGlobalObject<T extends Record<string, unknown>>(key: string, defaultValue: T): T {
|
||||
assert(key.startsWith("__internal_blitz"), "unsupported key")
|
||||
if (typeof global === "undefined") {
|
||||
@@ -25,7 +29,7 @@ function getGlobalObject<T extends Record<string, unknown>>(key: string, default
|
||||
}
|
||||
|
||||
type Resolver = (...args: unknown[]) => Promise<unknown>
|
||||
type ResolverFiles = Record<string, () => Promise<{default?: Resolver}>>
|
||||
type ResolverFiles = Record<string, () => Promise<{default?: Resolver; config?: ResolverConfig}>>
|
||||
export type ResolverPathOptions = "queries|mutations" | "root" | ((path: string) => string)
|
||||
|
||||
// We define `global.__internal_blitzRpcResolverFiles` to ensure we use the same global object.
|
||||
@@ -43,7 +47,7 @@ export function loadBlitzRpcResolverFilesWithInternalMechanism() {
|
||||
|
||||
export function __internal_addBlitzRpcResolver(
|
||||
routePath: string,
|
||||
resolver: () => Promise<{default?: Resolver}>,
|
||||
resolver: () => Promise<{default?: Resolver; config?: ResolverConfig}>,
|
||||
) {
|
||||
g.blitzRpcResolverFilesLoaded = g.blitzRpcResolverFilesLoaded || {}
|
||||
g.blitzRpcResolverFilesLoaded[routePath] = resolver
|
||||
@@ -169,19 +173,33 @@ export function rpcHandler(config: RpcConfig) {
|
||||
throw new Error("No resolver for path: " + routePath)
|
||||
}
|
||||
|
||||
const resolver = (await loadableResolver()).default
|
||||
const {default: resolver, config: resolverConfig} = await loadableResolver()
|
||||
|
||||
if (!resolver) {
|
||||
throw new Error("No default export for resolver path: " + routePath)
|
||||
}
|
||||
|
||||
const resolverConfigWithDefaults = {...defaultConfig, ...resolverConfig}
|
||||
|
||||
if (req.method === "HEAD") {
|
||||
// We used to initiate database connection here
|
||||
res.status(200).end()
|
||||
return
|
||||
} else if (req.method === "POST") {
|
||||
// Handle RPC call
|
||||
|
||||
if (typeof req.body.params === "undefined") {
|
||||
} else if (
|
||||
req.method === "POST" ||
|
||||
(req.method === "GET" && resolverConfigWithDefaults.httpMethod === "GET")
|
||||
) {
|
||||
if (req.method === "GET") {
|
||||
if (Object.keys(req.query).length === 1 && req.query.blitz) {
|
||||
const error = {message: "Request query is missing the required `params` and `meta` keys"}
|
||||
log.error(error.message)
|
||||
res.status(400).json({
|
||||
result: null,
|
||||
error,
|
||||
})
|
||||
return
|
||||
}
|
||||
} else if (typeof req.body.params === "undefined") {
|
||||
const error = {message: "Request body is missing the `params` key"}
|
||||
log.error(error.message)
|
||||
res.status(400).json({
|
||||
@@ -193,10 +211,9 @@ export function rpcHandler(config: RpcConfig) {
|
||||
|
||||
try {
|
||||
const data = deserialize({
|
||||
json: req.body.params,
|
||||
meta: req.body.meta?.params,
|
||||
json: req.method === "POST" ? req.body.params : parse(`${req.query.params}`),
|
||||
meta: req.method === "POST" ? req.body.meta?.params : parse(`${req.query.meta}`),
|
||||
})
|
||||
|
||||
log.info(customChalk.dim("Starting with input:"), data ? data : JSON.stringify(data))
|
||||
const startTime = Date.now()
|
||||
const result = await resolver(data, (res as any).blitzCtx)
|
||||
|
||||
@@ -8,6 +8,8 @@ import {
|
||||
toPosixPath,
|
||||
} from "./loader-utils"
|
||||
import {posix} from "path"
|
||||
import {log, ResolverConfig} from "blitz"
|
||||
import {getResolverConfig} from "./parse-rpc-config"
|
||||
|
||||
// Subset of `import type { LoaderDefinitionFunction } from 'webpack'`
|
||||
|
||||
@@ -39,12 +41,24 @@ export async function transformBlitzRpcResolverClient(
|
||||
) {
|
||||
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 resolverConfig: ResolverConfig = {
|
||||
httpMethod: "POST",
|
||||
}
|
||||
if (resolverType === "query") {
|
||||
try {
|
||||
const {httpMethod} = getResolverConfig(_src)
|
||||
if (httpMethod) {
|
||||
resolverConfig.httpMethod = httpMethod
|
||||
}
|
||||
} catch (e) {
|
||||
log.error(e as string)
|
||||
}
|
||||
}
|
||||
|
||||
const code = `
|
||||
// @ts-nocheck
|
||||
@@ -53,6 +67,7 @@ export async function transformBlitzRpcResolverClient(
|
||||
resolverName: "${resolverName}",
|
||||
resolverType: "${resolverType}",
|
||||
routePath: "${routePath}",
|
||||
httpMethod: "${resolverConfig.httpMethod}",
|
||||
});
|
||||
`
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {dirname, join, posix, relative} from "path"
|
||||
import {dirname, join, relative} from "path"
|
||||
import {promises} from "fs"
|
||||
import {
|
||||
assertPosixPath,
|
||||
@@ -52,18 +52,15 @@ export async function transformBlitzRpcServer(
|
||||
assertPosixPath(root)
|
||||
|
||||
const blitzImport = 'import { __internal_addBlitzRpcResolver } from "@blitzjs/rpc";'
|
||||
|
||||
// No break line between `blitzImport` and `src` in order to preserve the source map's line mapping
|
||||
let code = blitzImport + src
|
||||
code += "\n\n"
|
||||
|
||||
for (let resolverFilePath of resolvers) {
|
||||
const relativeResolverPath = slash(relative(dirname(id), join(root, resolverFilePath)))
|
||||
const routePath = convertPageFilePathToRoutePath(resolverFilePath, options?.resolverPath)
|
||||
code += `__internal_addBlitzRpcResolver('${routePath}', () => import('${relativeResolverPath}'));`
|
||||
code += `__internal_addBlitzRpcResolver('${routePath}',() => import('${relativeResolverPath}'));`
|
||||
code += "\n"
|
||||
}
|
||||
|
||||
// console.log("NEW CODE", code)
|
||||
return code
|
||||
}
|
||||
|
||||
57
packages/blitz-rpc/src/parse-rpc-config.ts
Normal file
57
packages/blitz-rpc/src/parse-rpc-config.ts
Normal file
@@ -0,0 +1,57 @@
|
||||
import {parseSync} from "@swc/core"
|
||||
import {ResolverConfig} from "blitz"
|
||||
|
||||
type _ResolverType = "GET" | "POST"
|
||||
|
||||
const defaultResolverConfig: ResolverConfig = {
|
||||
httpMethod: "POST",
|
||||
}
|
||||
|
||||
export function getResolverConfig(content: string): ResolverConfig {
|
||||
const resolverConfig = defaultResolverConfig
|
||||
const resolver = parseSync(content, {
|
||||
syntax: "typescript",
|
||||
target: "es2020",
|
||||
})
|
||||
const exportDelaration = resolver.body.find((node) => {
|
||||
if (node.type === "ExportDeclaration") {
|
||||
if (node.declaration.type === "VariableDeclaration") {
|
||||
if (node.declaration.declarations[0]?.id.type === "Identifier") {
|
||||
if (node.declaration.declarations[0].id.value === "config") {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
})
|
||||
if (exportDelaration && exportDelaration.type == "ExportDeclaration") {
|
||||
const declaration = exportDelaration.declaration
|
||||
if (declaration && declaration.type == "VariableDeclaration") {
|
||||
const declarator = declaration.declarations[0]
|
||||
if (declarator && declarator.type == "VariableDeclarator") {
|
||||
const variable = declarator.init
|
||||
if (variable && variable.type == "ObjectExpression") {
|
||||
const properties = variable.properties
|
||||
if (properties) {
|
||||
const httpMethodProperty = properties.find((property) => {
|
||||
if (property.type == "KeyValueProperty") {
|
||||
if (property.key.type == "Identifier") {
|
||||
return property.key.value == "httpMethod"
|
||||
}
|
||||
}
|
||||
return false
|
||||
})
|
||||
if (httpMethodProperty && httpMethodProperty.type == "KeyValueProperty") {
|
||||
const value = httpMethodProperty.value
|
||||
if (value && value.type == "StringLiteral") {
|
||||
resolverConfig.httpMethod = value.value as _ResolverType
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return resolverConfig
|
||||
}
|
||||
@@ -1,5 +1,25 @@
|
||||
# blitz
|
||||
|
||||
## 2.0.0-beta.16
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 1569bd53: Upgrade `tslog` to the latest version
|
||||
- ceb7db27: Add an opt-in GET request support to RPC specification by exporting a `config` object that has the `httpMethod` property.
|
||||
from `query` files.
|
||||
- 8e5903c0: Fix `cannot find module db error` in JavaScript template. Replace requiring the config using `esbuild` with parsing using `jscodeshift` to get the `cliConfig` values. Added logic to find the `blitz-server` file in `src` directory
|
||||
- 45459129: Include resolvers in `src` directory in blitz console
|
||||
- Updated dependencies [1569bd53]
|
||||
- Updated dependencies [8e5903c0]
|
||||
- @blitzjs/generator@2.0.0-beta.16
|
||||
|
||||
## 2.0.0-beta.15
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 1b798d9a: Fix `useSession` hook by exporting `enhancePrisma` from the server entry point instead of server
|
||||
- @blitzjs/generator@2.0.0-beta.15
|
||||
|
||||
## 2.0.0-beta.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "blitz",
|
||||
"version": "2.0.0-beta.14",
|
||||
"version": "2.0.0-beta.16",
|
||||
"scripts": {
|
||||
"build": "unbuild",
|
||||
"dev": "pnpm run predev && watch unbuild src --wait=0.2",
|
||||
@@ -25,7 +25,7 @@
|
||||
"blitz": "bin/blitz"
|
||||
},
|
||||
"dependencies": {
|
||||
"@blitzjs/generator": "2.0.0-beta.14",
|
||||
"@blitzjs/generator": "2.0.0-beta.16",
|
||||
"@mrleebo/prisma-ast": "0.2.6",
|
||||
"@types/global-agent": "2.1.1",
|
||||
"arg": "5.0.1",
|
||||
@@ -69,11 +69,11 @@
|
||||
"tar": "6.1.11",
|
||||
"ts-node": "10.7.0",
|
||||
"tsconfig-paths": "4.0.0",
|
||||
"tslog": "3.3.1",
|
||||
"tslog": "3.3.4",
|
||||
"watchpack": "2.1.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@blitzjs/config": "workspace:2.0.0-beta.14",
|
||||
"@blitzjs/config": "workspace:2.0.0-beta.16",
|
||||
"@types/cookie": "0.4.1",
|
||||
"@types/cross-spawn": "6.0.2",
|
||||
"@types/debug": "4.1.7",
|
||||
|
||||
@@ -15,7 +15,7 @@ import {
|
||||
MutationsGenerator,
|
||||
ModelGenerator,
|
||||
QueryGenerator,
|
||||
addCustomTemplatesBlitzConfig,
|
||||
customTemplatesBlitzConfig,
|
||||
} from "@blitzjs/generator"
|
||||
import {log} from "../../logging"
|
||||
|
||||
@@ -65,7 +65,7 @@ const createCustomTemplates = async () => {
|
||||
})
|
||||
const templatesPathValue: string = templatesPath.value
|
||||
const isTypeScript = await getIsTypeScript()
|
||||
addCustomTemplatesBlitzConfig(templatesPathValue, isTypeScript)
|
||||
await customTemplatesBlitzConfig(isTypeScript, templatesPathValue, true) // to run the codemod
|
||||
log.success(`🚀 Custom templates path added/updated in app/blitz-server file`)
|
||||
const customTemplatesPath = require("path").join(process.cwd(), templatesPathValue)
|
||||
const fsExtra = await import("fs-extra")
|
||||
@@ -275,20 +275,12 @@ const generate: CliCommand = async () => {
|
||||
const generators = generatorMap[selectedType as keyof typeof generatorMap]
|
||||
|
||||
const isTypeScript = await getIsTypeScript()
|
||||
const blitzServerPath = isTypeScript ? "app/blitz-server.ts" : "app/blitz-server.js"
|
||||
const blitzServer = require("path").join(process.cwd(), blitzServerPath)
|
||||
const {register} = require("esbuild-register/dist/node")
|
||||
const {unregister} = register({
|
||||
target: "es6",
|
||||
})
|
||||
const blitzConfig = require(blitzServer)
|
||||
const {cliConfig} = blitzConfig
|
||||
unregister()
|
||||
const cliConfig = await customTemplatesBlitzConfig(isTypeScript)
|
||||
|
||||
for (const GeneratorClass of generators) {
|
||||
const generator = new GeneratorClass({
|
||||
destinationRoot: require("path").resolve(),
|
||||
templateDir: cliConfig?.customTemplates,
|
||||
templateDir: cliConfig,
|
||||
extraArgs: args["_"].slice(3) as string[],
|
||||
modelName: singularRootContext,
|
||||
modelNames: modelNames(singularRootContext),
|
||||
|
||||
@@ -71,32 +71,30 @@ export const forceRequire = (modulePath: string) => {
|
||||
}
|
||||
}
|
||||
|
||||
export async function getBlitzModulePaths() {
|
||||
export async function getBlitzModulePaths(onlyDb = false) {
|
||||
const projectRoot = getProjectRootSync()
|
||||
const {globby} = await import("globby")
|
||||
const paths = await globby(
|
||||
[
|
||||
"app/**/{queries,mutations}/**/*.{js,ts,tsx}",
|
||||
"utils/*.{js,ts,tsx}",
|
||||
"jobs/**/*.{js,ts,tsx}",
|
||||
"integrations/**/*.{js,ts,tsx}",
|
||||
"!**/*.test.*",
|
||||
"!**/*.spec.*",
|
||||
],
|
||||
{cwd: projectRoot, gitignore: true},
|
||||
)
|
||||
paths.push(getDbFolder())
|
||||
debug("Paths", paths)
|
||||
|
||||
const paths = [getDbFolder()]
|
||||
if (!onlyDb) {
|
||||
const {globby} = await import("globby")
|
||||
paths.push(
|
||||
...(await globby(
|
||||
[
|
||||
"{app,src}/**/{queries,mutations}/**/*.{js,ts,tsx}",
|
||||
"utils/*.{js,ts,tsx}",
|
||||
"jobs/**/*.{js,ts,tsx}",
|
||||
"integrations/**/*.{js,ts,tsx}",
|
||||
"!**/*.test.*",
|
||||
"!**/*.spec.*",
|
||||
],
|
||||
{cwd: projectRoot, gitignore: true},
|
||||
)),
|
||||
)
|
||||
}
|
||||
return [...paths.map((p: string) => path.join(projectRoot, p))]
|
||||
}
|
||||
|
||||
export const loadBlitz = async (onlyDb: boolean, module = "") => {
|
||||
let paths = await getBlitzModulePaths()
|
||||
|
||||
if (onlyDb) {
|
||||
paths = paths.filter((p) => p.includes(getDbFolder()))
|
||||
}
|
||||
let paths = await getBlitzModulePaths(onlyDb)
|
||||
|
||||
if (module) {
|
||||
paths = paths.filter((p) => module.includes(p) || p.includes(module))
|
||||
|
||||
@@ -96,4 +96,3 @@ if (typeof window !== "undefined" && process.env.NODE_ENV === "development") {
|
||||
export * from "./utils"
|
||||
export * from "./types"
|
||||
export * from "./utils/zod"
|
||||
export * from "./utils/prisma"
|
||||
|
||||
@@ -5,9 +5,11 @@ import {Ctx} from "./types"
|
||||
export * from "./index-browser"
|
||||
export * from "./types"
|
||||
export * from "./utils/run-prisma"
|
||||
export * from "./utils/enhance-prisma"
|
||||
export * from "./middleware"
|
||||
export * from "./paginate"
|
||||
export * from "./logging"
|
||||
|
||||
export {startWatcher, stopWatcher} from "./cli/utils/routes-manifest"
|
||||
|
||||
export interface MiddlewareResponse<C extends Ctx = Ctx> extends ServerResponse {
|
||||
|
||||
@@ -6,6 +6,10 @@ export interface RouteUrlObject extends Pick<UrlObject, "pathname" | "query"> {
|
||||
pathname: string
|
||||
}
|
||||
|
||||
export type ResolverConfig = {
|
||||
httpMethod: "GET" | "POST"
|
||||
}
|
||||
|
||||
export type BlitzCliConfig = {
|
||||
customTemplates?: string
|
||||
}
|
||||
|
||||
@@ -1,5 +1,24 @@
|
||||
# @blitzjs/codemod
|
||||
|
||||
## 2.0.0-beta.16
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1569bd53]
|
||||
- Updated dependencies [ceb7db27]
|
||||
- Updated dependencies [8e5903c0]
|
||||
- Updated dependencies [45459129]
|
||||
- blitz@2.0.0-beta.16
|
||||
- @blitzjs/generator@2.0.0-beta.16
|
||||
|
||||
## 2.0.0-beta.15
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1b798d9a]
|
||||
- blitz@2.0.0-beta.15
|
||||
- @blitzjs/generator@2.0.0-beta.15
|
||||
|
||||
## 2.0.0-beta.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@blitzjs/codemod",
|
||||
"version": "2.0.0-beta.14",
|
||||
"version": "2.0.0-beta.16",
|
||||
"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-beta.14",
|
||||
"@blitzjs/generator": "2.0.0-beta.16",
|
||||
"arg": "5.0.1",
|
||||
"blitz": "2.0.0-beta.14",
|
||||
"blitz": "2.0.0-beta.16",
|
||||
"chalk": "^4.1.0",
|
||||
"cross-spawn": "7.0.3",
|
||||
"debug": "4.3.3",
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
# @blitzjs/config
|
||||
|
||||
## 2.0.0-beta.16
|
||||
|
||||
## 2.0.0-beta.15
|
||||
|
||||
## 2.0.0-beta.14
|
||||
|
||||
## 2.0.0-beta.13
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@blitzjs/config",
|
||||
"private": true,
|
||||
"version": "2.0.0-beta.14",
|
||||
"version": "2.0.0-beta.16",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@typescript-eslint/eslint-plugin": "5.9.1",
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
# @blitzjs/generator
|
||||
|
||||
## 2.0.0-beta.16
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 1569bd53: Upgrade `tslog` to the latest version
|
||||
- 8e5903c0: Fix `cannot find module db error` in JavaScript template. Replace requiring the config using `esbuild` with parsing using `jscodeshift` to get the `cliConfig` values. Added logic to find the `blitz-server` file in `src` directory
|
||||
|
||||
## 2.0.0-beta.15
|
||||
|
||||
## 2.0.0-beta.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@blitzjs/generator",
|
||||
"version": "2.0.0-beta.14",
|
||||
"version": "2.0.0-beta.16",
|
||||
"scripts": {
|
||||
"dev": "watch unbuild src --wait=0.2",
|
||||
"build": "unbuild && pnpm build:templates",
|
||||
@@ -31,6 +31,7 @@
|
||||
"diff": "5.0.0",
|
||||
"enquirer": "2.3.6",
|
||||
"fs-extra": "10.0.1",
|
||||
"globby": "13.1.2",
|
||||
"got": "^11.8.1",
|
||||
"jscodeshift": "0.13.0",
|
||||
"mem-fs": "1.2.0",
|
||||
@@ -41,12 +42,12 @@
|
||||
"prettier": "^2.5.1",
|
||||
"recast": "0.20.5",
|
||||
"supports-color": "8.1.1",
|
||||
"tslog": "3.3.1",
|
||||
"tslog": "3.3.4",
|
||||
"username": "5.1.0",
|
||||
"vinyl": "2.2.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@blitzjs/config": "2.0.0-beta.14",
|
||||
"@blitzjs/config": "2.0.0-beta.16",
|
||||
"@juanm04/cpx": "2.0.1",
|
||||
"@types/babel__core": "7.1.19",
|
||||
"@types/diff": "5.0.2",
|
||||
|
||||
@@ -16,12 +16,31 @@ import {readdirRecursive} from "./utils/readdir-recursive"
|
||||
import prettier from "prettier"
|
||||
const debug = require("debug")("blitz:generator")
|
||||
|
||||
export const addCustomTemplatesBlitzConfig = (
|
||||
customTemplatesPath: string,
|
||||
export function getProjectRootSync() {
|
||||
return path.dirname(getConfigSrcPath())
|
||||
}
|
||||
|
||||
export function getConfigSrcPath() {
|
||||
const jsPath = path.resolve(path.join(process.cwd(), "next.config.js"))
|
||||
return jsPath
|
||||
}
|
||||
|
||||
export const customTemplatesBlitzConfig = async (
|
||||
isTypeScript: boolean,
|
||||
customTemplatesPath = "",
|
||||
codemod = false,
|
||||
) => {
|
||||
const blitzServer = isTypeScript ? "app/blitz-server.ts" : "app/blitz-server.js"
|
||||
const blitzServerPath = require("path").join(process.cwd(), blitzServer)
|
||||
const {globby} = await import("globby")
|
||||
const blitzServer = await globby(["{app,src}/**/blitz-server.{ts,js}"], {
|
||||
cwd: getProjectRootSync(),
|
||||
})
|
||||
if (blitzServer.length === 0) {
|
||||
throw new Error("Could not find blitz-server.js or blitz-server.ts in app or src folder")
|
||||
}
|
||||
if (blitzServer.length > 1) {
|
||||
throw new Error("Found more than one blitz-server.js or blitz-server.ts in app or src folder")
|
||||
}
|
||||
const blitzServerPath = require("path").join(process.cwd(), blitzServer.at(0))
|
||||
const userConfigModuleSource = fs.readFileSync(blitzServerPath, {encoding: "utf-8"})
|
||||
const userConfigModule = j(userConfigModuleSource, {parser: customTsParser})
|
||||
const program = userConfigModule.get()
|
||||
@@ -86,6 +105,9 @@ export const addCustomTemplatesBlitzConfig = (
|
||||
if (customTemplatesProperty.type === "ObjectProperty") {
|
||||
const customValue = customTemplatesProperty.value
|
||||
if (customValue.type === "StringLiteral") {
|
||||
if (!codemod) {
|
||||
return customValue.value
|
||||
}
|
||||
customValue.value = customTemplatesPath
|
||||
}
|
||||
}
|
||||
@@ -94,8 +116,10 @@ export const addCustomTemplatesBlitzConfig = (
|
||||
}
|
||||
}
|
||||
}
|
||||
const newSource = userConfigModule.toSource()
|
||||
fs.writeFileSync(blitzServerPath, newSource)
|
||||
if (codemod) {
|
||||
const newSource = userConfigModule.toSource()
|
||||
fs.writeFileSync(blitzServerPath, newSource)
|
||||
}
|
||||
}
|
||||
|
||||
export const customTsParser = {
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
"@typescript-eslint/parser": "5.9.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@blitzjs/config": "2.0.0-beta.14",
|
||||
"@blitzjs/config": "2.0.0-beta.16",
|
||||
"@types/react": "18.0.17",
|
||||
"@types/react-dom": "17.0.14",
|
||||
"react": "18.2.0",
|
||||
|
||||
731
pnpm-lock.yaml
generated
731
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@@ -23,7 +23,7 @@
|
||||
},
|
||||
"homepage": "https://github.com/blitz-js/blitz#readme",
|
||||
"dependencies": {
|
||||
"blitz": "2.0.0-beta.14",
|
||||
"blitz": "2.0.0-beta.16",
|
||||
"jscodeshift": "0.13.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
},
|
||||
"homepage": "https://github.com/blitz-js/blitz#readme",
|
||||
"dependencies": {
|
||||
"blitz": "2.0.0-beta.14",
|
||||
"blitz": "2.0.0-beta.16",
|
||||
"jscodeshift": "0.13.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
},
|
||||
"homepage": "https://github.com/blitz-js/blitz#readme",
|
||||
"dependencies": {
|
||||
"blitz": "2.0.0-beta.14",
|
||||
"blitz": "2.0.0-beta.16",
|
||||
"jscodeshift": "0.13.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
},
|
||||
"homepage": "https://github.com/blitz-js/blitz#readme",
|
||||
"dependencies": {
|
||||
"blitz": "2.0.0-beta.14",
|
||||
"blitz": "2.0.0-beta.16",
|
||||
"jscodeshift": "0.13.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
},
|
||||
"homepage": "https://github.com/blitz-js/blitz#readme",
|
||||
"dependencies": {
|
||||
"blitz": "2.0.0-beta.14",
|
||||
"blitz": "2.0.0-beta.16",
|
||||
"jscodeshift": "0.13.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -24,6 +24,6 @@
|
||||
},
|
||||
"homepage": "https://github.com/blitz-js/blitz#readme",
|
||||
"dependencies": {
|
||||
"blitz": "2.0.0-beta.14"
|
||||
"blitz": "2.0.0-beta.16"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,6 +24,6 @@
|
||||
},
|
||||
"homepage": "https://github.com/blitz-js/blitz#readme",
|
||||
"dependencies": {
|
||||
"blitz": "2.0.0-beta.14"
|
||||
"blitz": "2.0.0-beta.16"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
},
|
||||
"homepage": "https://github.com/blitz-js/blitz#readme",
|
||||
"dependencies": {
|
||||
"blitz": "2.0.0-beta.14",
|
||||
"blitz": "2.0.0-beta.16",
|
||||
"jscodeshift": "0.13.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
},
|
||||
"homepage": "https://github.com/blitz-js/blitz#readme",
|
||||
"dependencies": {
|
||||
"blitz": "2.0.0-beta.14",
|
||||
"blitz": "2.0.0-beta.16",
|
||||
"jscodeshift": "0.13.0",
|
||||
"uuid": "^8.3.1"
|
||||
},
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
},
|
||||
"homepage": "https://github.com/blitz-js/blitz#readme",
|
||||
"dependencies": {
|
||||
"blitz": "2.0.0-beta.14",
|
||||
"blitz": "2.0.0-beta.16",
|
||||
"jscodeshift": "0.13.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
},
|
||||
"homepage": "https://github.com/blitz-js/blitz#readme",
|
||||
"dependencies": {
|
||||
"blitz": "2.0.0-beta.14",
|
||||
"blitz": "2.0.0-beta.16",
|
||||
"jscodeshift": "0.13.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
},
|
||||
"homepage": "https://github.com/blitz-js/blitz#readme",
|
||||
"dependencies": {
|
||||
"blitz": "2.0.0-beta.14",
|
||||
"blitz": "2.0.0-beta.16",
|
||||
"jscodeshift": "0.13.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -23,6 +23,6 @@
|
||||
},
|
||||
"homepage": "https://github.com/blitz-js/blitz#readme",
|
||||
"dependencies": {
|
||||
"blitz": "2.0.0-beta.14"
|
||||
"blitz": "2.0.0-beta.16"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,6 +22,6 @@
|
||||
},
|
||||
"homepage": "https://github.com/blitz-js/blitz#readme",
|
||||
"dependencies": {
|
||||
"blitz": "2.0.0-beta.14"
|
||||
"blitz": "2.0.0-beta.16"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
},
|
||||
"homepage": "https://github.com/blitz-js/blitz#readme",
|
||||
"dependencies": {
|
||||
"blitz": "2.0.0-beta.14",
|
||||
"blitz": "2.0.0-beta.16",
|
||||
"jscodeshift": "0.13.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -22,6 +22,6 @@
|
||||
},
|
||||
"homepage": "https://github.com/blitz-js/blitz#readme",
|
||||
"dependencies": {
|
||||
"blitz": "2.0.0-beta.14"
|
||||
"blitz": "2.0.0-beta.16"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
},
|
||||
"homepage": "https://github.com/blitz-js/blitz#readme",
|
||||
"dependencies": {
|
||||
"blitz": "2.0.0-beta.14",
|
||||
"blitz": "2.0.0-beta.16",
|
||||
"jscodeshift": "0.13.0",
|
||||
"uuid": "^8.3.1"
|
||||
},
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
},
|
||||
"homepage": "https://github.com/blitz-js/blitz#readme",
|
||||
"dependencies": {
|
||||
"blitz": "2.0.0-beta.14",
|
||||
"blitz": "2.0.0-beta.16",
|
||||
"jscodeshift": "0.13.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
},
|
||||
"homepage": "https://github.com/blitz-js/blitz#readme",
|
||||
"dependencies": {
|
||||
"blitz": "2.0.0-beta.14",
|
||||
"blitz": "2.0.0-beta.16",
|
||||
"jscodeshift": "0.13.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
},
|
||||
"homepage": "https://github.com/blitz-js/blitz#readme",
|
||||
"dependencies": {
|
||||
"blitz": "2.0.0-beta.14",
|
||||
"blitz": "2.0.0-beta.16",
|
||||
"jscodeshift": "0.13.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
},
|
||||
"homepage": "https://github.com/blitz-js/blitz#readme",
|
||||
"dependencies": {
|
||||
"blitz": "2.0.0-beta.14",
|
||||
"blitz": "2.0.0-beta.16",
|
||||
"jscodeshift": "0.13.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
},
|
||||
"homepage": "https://github.com/blitz-js/blitz#readme",
|
||||
"dependencies": {
|
||||
"blitz": "2.0.0-beta.14",
|
||||
"blitz": "2.0.0-beta.16",
|
||||
"jscodeshift": "0.13.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
Reference in New Issue
Block a user