Skip to content

Commit

Permalink
@redwoodjs/server-store and @redwoodjs/cookie-jar (#10756)
Browse files Browse the repository at this point in the history
  • Loading branch information
Tobbe authored Jun 8, 2024
1 parent 868b6b0 commit 07c6122
Show file tree
Hide file tree
Showing 27 changed files with 195 additions and 21 deletions.
3 changes: 3 additions & 0 deletions packages/cookie-jar/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Cookie Jar

Specialized cookie map, that lets you set cookies with options
8 changes: 8 additions & 0 deletions packages/cookie-jar/build.mts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { build, defaultBuildOptions } from '@redwoodjs/framework-tools'

await build({
buildOptions: {
...defaultBuildOptions,
format: 'cjs',
},
})
37 changes: 37 additions & 0 deletions packages/cookie-jar/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{
"name": "@redwoodjs/cookie-jar",
"version": "7.0.0",
"repository": {
"type": "git",
"url": "git+https://github.com/redwoodjs/redwood.git",
"directory": "packages/cookie-jar"
},
"license": "MIT",
"type": "commonjs",
"exports": {
"types": "./dist/CookieJar.d.ts",
"default": "./dist/CookieJar.js"
},
"types": "./dist/CookieJar.d.ts",
"files": [
"dist"
],
"scripts": {
"build": "tsx ./build.mts && run build:types",
"build:pack": "yarn pack -o redwoodjs-cookie-jar.tgz",
"build:types": "tsc --build --verbose"
},
"dependencies": {
"cookie": "0.6.0",
"esbuild": "0.21.3",
"fast-glob": "3.3.2",
"fs-extra": "11.2.0"
},
"devDependencies": {
"@redwoodjs/framework-tools": "workspace:*",
"@types/fs-extra": "11.0.4",
"tsx": "4.10.3",
"typescript": "5.4.5"
},
"gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1"
}
File renamed without changes.
File renamed without changes.
14 changes: 14 additions & 0 deletions packages/cookie-jar/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"extends": "../../tsconfig.compilerOption.json",
"compilerOptions": {
"moduleResolution": "NodeNext",
"module": "NodeNext",
"baseUrl": ".",
"rootDir": "src",
"outDir": "dist"
},
"include": ["src"],
"references": [
{ "path": "../framework-tools" }
]
}
3 changes: 3 additions & 0 deletions packages/server-store/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Server Store

Singleton used to access Async Local Storage
8 changes: 8 additions & 0 deletions packages/server-store/build.mts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { build, defaultBuildOptions } from '@redwoodjs/framework-tools'

await build({
buildOptions: {
...defaultBuildOptions,
format: 'cjs',
},
})
38 changes: 38 additions & 0 deletions packages/server-store/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{
"name": "@redwoodjs/server-store",
"version": "7.0.0",
"repository": {
"type": "git",
"url": "git+https://github.com/redwoodjs/redwood.git",
"directory": "packages/server-store"
},
"license": "MIT",
"type": "commonjs",
"exports": {
"types": "./dist/serverStore.d.ts",
"default": "./dist/serverStore.js"
},
"types": "./dist/serverStore.d.ts",
"files": [
"dist"
],
"scripts": {
"build": "tsx ./build.mts && run build:types",
"build:pack": "yarn pack -o redwoodjs-server-store.tgz",
"build:types": "tsc --build --verbose"
},
"dependencies": {
"@redwoodjs/auth": "workspace:*",
"@redwoodjs/cookie-jar": "workspace:*",
"esbuild": "0.21.3",
"fast-glob": "3.3.2",
"fs-extra": "11.2.0"
},
"devDependencies": {
"@redwoodjs/framework-tools": "workspace:*",
"@types/fs-extra": "11.0.4",
"tsx": "4.10.3",
"typescript": "5.4.5"
},
"gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1"
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import { AsyncLocalStorage } from 'async_hooks'

import type { ServerAuthState } from '@redwoodjs/auth/dist/AuthProvider/ServerAuthProvider.js'

import { CookieJar } from './middleware/CookieJar.js'
import type { ServerAuthState } from '@redwoodjs/auth/dist/AuthProvider/ServerAuthProvider.js' with { 'resolution-mode': 'import' }
import { CookieJar } from '@redwoodjs/cookie-jar'

export interface ServerStore extends Map<string, any> {}

Expand Down
16 changes: 16 additions & 0 deletions packages/server-store/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"extends": "../../tsconfig.compilerOption.json",
"compilerOptions": {
"moduleResolution": "NodeNext",
"module": "NodeNext",
"baseUrl": ".",
"rootDir": "src",
"outDir": "dist"
},
"include": ["src"],
"references": [
{ "path": "../auth/tsconfig.build.json" },
{ "path": "../cookie-jar" },
{ "path": "../framework-tools" }
]
}
6 changes: 2 additions & 4 deletions packages/vite/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,6 @@
"./middleware": {
"types": "./dist/middleware/index.d.ts",
"default": "./dist/middleware/index.js"
},
"./serverStore": {
"types": "./dist/serverStore.d.ts",
"default": "./dist/serverStore.js"
}
},
"bin": {
Expand Down Expand Up @@ -75,8 +71,10 @@
"@babel/traverse": "^7.22.20",
"@redwoodjs/auth": "workspace:*",
"@redwoodjs/babel-config": "workspace:*",
"@redwoodjs/cookie-jar": "workspace:*",
"@redwoodjs/internal": "workspace:*",
"@redwoodjs/project-config": "workspace:*",
"@redwoodjs/server-store": "workspace:*",
"@redwoodjs/web": "workspace:*",
"@swc/core": "1.5.7",
"@vitejs/plugin-react": "4.2.1",
Expand Down
5 changes: 4 additions & 1 deletion packages/vite/src/devFeServer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,17 @@ import type { RouteSpec } from '@redwoodjs/internal/dist/routes'
import { getProjectRoutes } from '@redwoodjs/internal/dist/routes'
import type { Paths } from '@redwoodjs/project-config'
import { getConfig, getPaths } from '@redwoodjs/project-config'
import {
createPerRequestMap,
createServerStorage,
} from '@redwoodjs/server-store'

import { registerFwGlobalsAndShims } from './lib/registerFwGlobalsAndShims.js'
import { invoke } from './middleware/invokeMiddleware.js'
import { createMiddlewareRouter } from './middleware/register.js'
import type { Middleware } from './middleware/types.js'
import { rscRoutesAutoLoader } from './plugins/vite-plugin-rsc-routes-auto-loader.js'
import { createRscRequestHandler } from './rsc/rscRequestHandler.js'
import { createPerRequestMap, createServerStorage } from './serverStore.js'
import { collectCssPaths, componentsModules } from './streaming/collectCss.js'
import { createReactStreamingHandler } from './streaming/createReactStreamingHandler.js'
import {
Expand Down
3 changes: 1 addition & 2 deletions packages/vite/src/middleware/MiddlewareRequest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@ import { Request as WhatWgRequest } from '@whatwg-node/fetch'

import { middlewareDefaultAuthProviderState } from '@redwoodjs/auth/dist/AuthProvider/AuthProviderState.js'
import type { ServerAuthState } from '@redwoodjs/auth/dist/AuthProvider/ServerAuthProvider.js'

import { CookieJar } from './CookieJar.js'
import { CookieJar } from '@redwoodjs/cookie-jar'

class AuthStateJar {
private _data: ServerAuthState | null
Expand Down
2 changes: 1 addition & 1 deletion packages/vite/src/middleware/MiddlewareResponse.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Response as PonyResponse } from '@whatwg-node/fetch'
import cookie from 'cookie'

import { CookieJar } from './CookieJar.js'
import { CookieJar } from '@redwoodjs/cookie-jar'

export class MiddlewareShortCircuit extends Error {
mwResponse: MiddlewareResponse
Expand Down
1 change: 0 additions & 1 deletion packages/vite/src/middleware/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
export * from './CookieJar.js'
export * from './MiddlewareRequest.js'
export * from './MiddlewareResponse.js'
export * from './types.js'
3 changes: 1 addition & 2 deletions packages/vite/src/middleware/invokeMiddleware.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ import { afterAll, beforeAll, describe, expect, test, vi } from 'vitest'

import type { ServerAuthState } from '@redwoodjs/auth'
import { middlewareDefaultAuthProviderState } from '@redwoodjs/auth'

import { createServerStorage } from '../serverStore'
import { createServerStorage } from '@redwoodjs/server-store'

import { invoke } from './invokeMiddleware'
import type { MiddlewareRequest } from './MiddlewareRequest'
Expand Down
3 changes: 1 addition & 2 deletions packages/vite/src/middleware/invokeMiddleware.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import type { ServerAuthState } from '@redwoodjs/auth/dist/AuthProvider/ServerAuthProvider.js'

import { setServerAuthState } from '../serverStore.js'
import { setServerAuthState } from '@redwoodjs/server-store'

import { MiddlewareRequest } from './MiddlewareRequest.js'
import {
Expand Down
2 changes: 2 additions & 0 deletions packages/vite/src/rsc/rscBuildAnalyze.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@ export async function rscBuildAnalyze() {
'@prisma/fetch-engine',
'@prisma/internals',
'playwright',
'@redwoodjs/cookie-jar',
'@redwoodjs/server-store',
],
resolve: {
externalConditions: ['react-server'],
Expand Down
7 changes: 6 additions & 1 deletion packages/vite/src/rsc/rscBuildForServer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,12 @@ export async function rscBuildForServer(
// Can't inline prisma client (db calls fail at runtime) or react-dom
// (css pre-init failure)
// Server store has to be externalized, because it's a singleton (shared between FW and App)
external: ['@prisma/client', 'react-dom', '@redwoodjs/vite/serverStore'],
external: [
'@prisma/client',
'react-dom',
'@redwoodjs/cookie-jar',
'@redwoodjs/server-store',
],
resolve: {
// These conditions are used in the plugin pipeline, and only affect non-externalized
// dependencies during the SSR build. Which because of `noExternal: true` means all
Expand Down
2 changes: 2 additions & 0 deletions packages/vite/src/rsc/rscBuildForSsr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ export async function rscBuildForSsr({
'@prisma/fetch-engine',
'@prisma/internals',
'playwright',
'@redwoodjs/cookie-jar',
'@redwoodjs/server-store',
],
},
plugins: [
Expand Down
3 changes: 2 additions & 1 deletion packages/vite/src/rsc/rscRequestHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,15 @@ import type Router from 'find-my-way'
import type { HTTPMethod } from 'find-my-way'
import type { ViteDevServer } from 'vite'

import { getAuthState, getRequestHeaders } from '@redwoodjs/server-store'

import {
decodeReply,
decodeReplyFromBusboy,
} from '../bundled/react-server-dom-webpack.server'
import { hasStatusCode } from '../lib/StatusError.js'
import type { Middleware } from '../middleware'
import { invoke } from '../middleware/invokeMiddleware'
import { getAuthState, getRequestHeaders } from '../serverStore'
import { getFullUrlForFlightRequest } from '../utils'

import type { RscFetchProps } from './rscFetchForClientRouter'
Expand Down
2 changes: 1 addition & 1 deletion packages/vite/src/rsc/rscStudioHandlers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import type { PassThrough } from 'node:stream'
import type { Request } from 'express'

import { getConfig, getRawConfig } from '@redwoodjs/project-config'
import { getAuthState, getRequestHeaders } from '@redwoodjs/server-store'

import { getAuthState, getRequestHeaders } from '../serverStore.js'
import { getFullUrlForFlightRequest } from '../utils.js'

import type { RenderInput } from './rscWorkerCommunication.js'
Expand Down
5 changes: 4 additions & 1 deletion packages/vite/src/rsc/rscWorker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ import type { ResolvedConfig } from 'vite'
import { createServer, resolveConfig } from 'vite'

import { getPaths } from '@redwoodjs/project-config'
import {
createPerRequestMap,
createServerStorage,
} from '@redwoodjs/server-store'

import { getEntriesFromDist } from '../lib/entries.js'
import { registerFwGlobalsAndShims } from '../lib/registerFwGlobalsAndShims.js'
Expand All @@ -24,7 +28,6 @@ import { rscReloadPlugin } from '../plugins/vite-plugin-rsc-reload.js'
import { rscRoutesAutoLoader } from '../plugins/vite-plugin-rsc-routes-auto-loader.js'
import { rscTransformUseClientPlugin } from '../plugins/vite-plugin-rsc-transform-client.js'
import { rscTransformUseServerPlugin } from '../plugins/vite-plugin-rsc-transform-server.js'
import { createPerRequestMap, createServerStorage } from '../serverStore.js'

import type {
MessageReq,
Expand Down
5 changes: 4 additions & 1 deletion packages/vite/src/runFeServer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ import { createProxyMiddleware } from 'http-proxy-middleware'
import type { Manifest as ViteBuildManifest } from 'vite'

import { getConfig, getPaths } from '@redwoodjs/project-config'
import {
createPerRequestMap,
createServerStorage,
} from '@redwoodjs/server-store'

import { registerFwGlobalsAndShims } from './lib/registerFwGlobalsAndShims.js'
import { invoke } from './middleware/invokeMiddleware.js'
Expand All @@ -25,7 +29,6 @@ import type { Middleware } from './middleware/types.js'
import { getRscStylesheetLinkGenerator } from './rsc/rscCss.js'
import { createRscRequestHandler } from './rsc/rscRequestHandler.js'
import { setClientEntries } from './rsc/rscWorkerCommunication.js'
import { createPerRequestMap, createServerStorage } from './serverStore.js'
import { createReactStreamingHandler } from './streaming/createReactStreamingHandler.js'
import type { RWRouteManifest } from './types.js'
import { convertExpressHeaders, getFullUrl } from './utils.js'
Expand Down
2 changes: 2 additions & 0 deletions packages/vite/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@
},
"include": ["src/**/*", "./ambient.d.ts", "./modules.d.ts"],
"references": [
{ "path": "../cookie-jar" },
{ "path": "../internal" },
{ "path": "../project-config" },
{ "path": "../router" },
{ "path": "../server-store" },
{ "path": "../web" }
]
}
33 changes: 33 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -8110,6 +8110,21 @@ __metadata:
languageName: unknown
linkType: soft

"@redwoodjs/cookie-jar@workspace:*, @redwoodjs/cookie-jar@workspace:packages/cookie-jar":
version: 0.0.0-use.local
resolution: "@redwoodjs/cookie-jar@workspace:packages/cookie-jar"
dependencies:
"@redwoodjs/framework-tools": "workspace:*"
"@types/fs-extra": "npm:11.0.4"
cookie: "npm:0.6.0"
esbuild: "npm:0.21.3"
fast-glob: "npm:3.3.2"
fs-extra: "npm:11.2.0"
tsx: "npm:4.10.3"
typescript: "npm:5.4.5"
languageName: unknown
linkType: soft

"@redwoodjs/core@workspace:packages/core":
version: 0.0.0-use.local
resolution: "@redwoodjs/core@workspace:packages/core"
Expand Down Expand Up @@ -8592,6 +8607,22 @@ __metadata:
languageName: unknown
linkType: soft

"@redwoodjs/server-store@workspace:*, @redwoodjs/server-store@workspace:packages/server-store":
version: 0.0.0-use.local
resolution: "@redwoodjs/server-store@workspace:packages/server-store"
dependencies:
"@redwoodjs/auth": "workspace:*"
"@redwoodjs/cookie-jar": "workspace:*"
"@redwoodjs/framework-tools": "workspace:*"
"@types/fs-extra": "npm:11.0.4"
esbuild: "npm:0.21.3"
fast-glob: "npm:3.3.2"
fs-extra: "npm:11.2.0"
tsx: "npm:4.10.3"
typescript: "npm:5.4.5"
languageName: unknown
linkType: soft

"@redwoodjs/structure@workspace:*, @redwoodjs/structure@workspace:packages/structure":
version: 0.0.0-use.local
resolution: "@redwoodjs/structure@workspace:packages/structure"
Expand Down Expand Up @@ -8713,8 +8744,10 @@ __metadata:
"@babel/traverse": "npm:^7.22.20"
"@redwoodjs/auth": "workspace:*"
"@redwoodjs/babel-config": "workspace:*"
"@redwoodjs/cookie-jar": "workspace:*"
"@redwoodjs/internal": "workspace:*"
"@redwoodjs/project-config": "workspace:*"
"@redwoodjs/server-store": "workspace:*"
"@redwoodjs/web": "workspace:*"
"@swc/core": "npm:1.5.7"
"@types/busboy": "npm:^1"
Expand Down

0 comments on commit 07c6122

Please sign in to comment.