diff --git a/packages/auth-providers/dbAuth/middleware/build.mts b/packages/auth-providers/dbAuth/middleware/build.mts index 16175a6725c0..3cc5a9c0a690 100644 --- a/packages/auth-providers/dbAuth/middleware/build.mts +++ b/packages/auth-providers/dbAuth/middleware/build.mts @@ -1,3 +1,35 @@ -import { build } from '@redwoodjs/framework-tools' +import { + build, + defaultBuildOptions, +} from '@redwoodjs/framework-tools' -await build() +import { generateCjsTypes} from '@redwoodjs/framework-tools/cjsTypes' +import { writeFileSync } from 'node:fs' + +// CJS build +await build({ + buildOptions: { + ...defaultBuildOptions, + outdir: 'dist/cjs', + packages: 'external', + }, +}) + +// ESM build +await build({ + buildOptions: { + ...defaultBuildOptions, + format: 'esm', + packages: 'external', + }, +}) + +// Place a package.json file with `type: commonjs` in the dist/cjs folder so that +// all .js files are treated as CommonJS files. +writeFileSync('dist/cjs/package.json', JSON.stringify({ type: 'commonjs' })) + +// Place a package.json file with `type: module` in the dist folder so that +// all .js files are treated as ES Module files. +writeFileSync('dist/package.json', JSON.stringify({ type: 'module' })) + +await generateCjsTypes() diff --git a/packages/auth-providers/dbAuth/middleware/cjsWrappers/plugin.js b/packages/auth-providers/dbAuth/middleware/cjsWrappers/plugin.js deleted file mode 100644 index 847efca544cf..000000000000 --- a/packages/auth-providers/dbAuth/middleware/cjsWrappers/plugin.js +++ /dev/null @@ -1,4 +0,0 @@ -/* eslint-env node */ - -module.exports = - require('../dist/vite-plugin-auth-dbauth-middleware.js').default diff --git a/packages/auth-providers/dbAuth/middleware/package.json b/packages/auth-providers/dbAuth/middleware/package.json index 560854a53f48..cdbf5d8b358b 100644 --- a/packages/auth-providers/dbAuth/middleware/package.json +++ b/packages/auth-providers/dbAuth/middleware/package.json @@ -1,5 +1,6 @@ { "name": "@redwoodjs/auth-dbauth-middleware", + "type": "module", "version": "7.0.0", "repository": { "type": "git", @@ -7,27 +8,33 @@ "directory": "packages/auth-providers/dbAuth/middleware" }, "license": "MIT", - "exports": { - ".": { - "default": "./dist/index.js" - }, - "./plugin": { - "import": "./dist/vite-plugin-auth-dbauth-middleware.js", - "default": "./cjsWrappers/plugin.js" - } - }, "main": "./dist/index.js", "types": "./dist/index.d.ts", "files": [ - "dist", - "cjsWrappers" + "dist" ], + "exports": { + ".": { + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "require": { + "types": "./dist/cjs/index.d.ts", + "default": "./dist/cjs/index.js" + } + } + }, "scripts": { "build": "tsx ./build.mts && yarn build:types", "build:pack": "yarn pack -o redwoodjs-auth-dbauth-middleware.tgz", - "build:types": "tsc --build --verbose", + "build:types": "tsc --build --verbose ./tsconfig.json", "prepublishOnly": "NODE_ENV=production yarn build", - "test": "vitest run", + "test": "concurrently npm:test:vitest npm:test:attw npm:test:publint", + "test:attw": "yarn attw -P", + "build:types-cjs": "tsc --build --verbose tsconfig.types-cjs.json", + "test:publint": "yarn publint", + "test:vitest": "vitest run", "test:watch": "vitest watch" }, "dependencies": { @@ -35,10 +42,13 @@ "@redwoodjs/web": "workspace:*" }, "devDependencies": { + "@arethetypeswrong/cli": "0.15.3", "@redwoodjs/api": "workspace:*", "@redwoodjs/framework-tools": "workspace:*", "@redwoodjs/graphql-server": "workspace:*", "@types/aws-lambda": "8.10.138", + "concurrently": "8.2.2", + "publint": "0.2.8", "ts-toolbelt": "9.6.0", "tsx": "4.15.6", "typescript": "5.4.5", diff --git a/packages/auth-providers/dbAuth/middleware/src/__tests__/initDbAuthMiddleware.test.ts b/packages/auth-providers/dbAuth/middleware/src/__tests__/initDbAuthMiddleware.test.ts index 67d0b34ab0f7..7f1a20d1fce7 100644 --- a/packages/auth-providers/dbAuth/middleware/src/__tests__/initDbAuthMiddleware.test.ts +++ b/packages/auth-providers/dbAuth/middleware/src/__tests__/initDbAuthMiddleware.test.ts @@ -23,22 +23,24 @@ beforeAll(() => { vi.mock('@redwoodjs/auth-dbauth-api', async (importOriginal) => { const original = (await importOriginal()) as any return { - ...original, - dbAuthSession: vi.fn().mockImplementation((req, cookieName) => { - if ( - req.headers - .get('Cookie') - .includes(`${cookieName}=this_is_the_only_correct_session`) - ) { - return { - currentUser: { - email: 'user-1@example.com', - id: 'mocked-current-user-1', - }, - mockedSession: 'this_is_the_only_correct_session', + default: { + ...original, + dbAuthSession: vi.fn().mockImplementation((req, cookieName) => { + if ( + req.headers + .get('Cookie') + .includes(`${cookieName}=this_is_the_only_correct_session`) + ) { + return { + currentUser: { + email: 'user-1@example.com', + id: 'mocked-current-user-1', + }, + mockedSession: 'this_is_the_only_correct_session', + } } - } - }), + }), + }, } }) }) diff --git a/packages/auth-providers/dbAuth/middleware/src/index.ts b/packages/auth-providers/dbAuth/middleware/src/index.ts index c54c4cfdaf04..2f0525e596cf 100644 --- a/packages/auth-providers/dbAuth/middleware/src/index.ts +++ b/packages/auth-providers/dbAuth/middleware/src/index.ts @@ -1,18 +1,14 @@ import type { APIGatewayProxyEvent, Context } from 'aws-lambda' import type { DbAuthResponse } from '@redwoodjs/auth-dbauth-api' -import { - cookieName as cookieNameCreator, - dbAuthSession, -} from '@redwoodjs/auth-dbauth-api' +import dbAuthApi from '@redwoodjs/auth-dbauth-api' +// ^^ above package is still CJS, and named exports aren't supported in import statements +const { dbAuthSession, cookieName: cookieNameCreator } = dbAuthApi import type { GetCurrentUser } from '@redwoodjs/graphql-server' import { MiddlewareResponse } from '@redwoodjs/web/middleware' -import type { - Middleware, - MiddlewareRequest, -} from '@redwoodjs/web/middleware' with { 'resolution-mode': 'import' } +import type { Middleware, MiddlewareRequest } from '@redwoodjs/web/middleware' -import { defaultGetRoles } from './defaultGetRoles' +import { defaultGetRoles } from './defaultGetRoles.js' export interface DbAuthMiddlewareOptions { cookieName?: string diff --git a/packages/auth-providers/dbAuth/middleware/tsconfig.types-cjs.json b/packages/auth-providers/dbAuth/middleware/tsconfig.types-cjs.json index e90ac23ee2ae..6bbdc61737c4 100644 --- a/packages/auth-providers/dbAuth/middleware/tsconfig.types-cjs.json +++ b/packages/auth-providers/dbAuth/middleware/tsconfig.types-cjs.json @@ -2,5 +2,6 @@ "extends": "./tsconfig.json", "compilerOptions": { "outDir": "dist/cjs", - }, + "tsBuildInfoFile": "./tsconfig.types-cjs.tsbuildinfo" + } } diff --git a/packages/framework-tools/src/cjsTypes.ts b/packages/framework-tools/src/cjsTypes.ts index 28ff40dba1e4..d3a9c9686ac7 100644 --- a/packages/framework-tools/src/cjsTypes.ts +++ b/packages/framework-tools/src/cjsTypes.ts @@ -32,11 +32,10 @@ export const generateCjsTypes = async () => { try { await $`yarn build:types-cjs` - } catch (e) { - console.error('Could not build CJS types') - console.error(e) - - process.exit(1) + } catch (e: any) { + console.error('---- Error building CJS types ----') + process.exitCode = e.exitCode + throw new Error(e) } finally { await $`mv package.json.bak package.json` } diff --git a/packages/vite/src/devFeServer.ts b/packages/vite/src/devFeServer.ts index 77d639321719..b3ccde9a2d29 100644 --- a/packages/vite/src/devFeServer.ts +++ b/packages/vite/src/devFeServer.ts @@ -84,11 +84,12 @@ async function createServer() { plugins: [ cjsInterop({ dependencies: [ - // Skip ESM modules: rwjs/auth, rwjs/web + // Skip ESM modules: rwjs/auth, rwjs/web, rwjs/auth-*-middleware '@redwoodjs/forms', '@redwoodjs/prerender/*', '@redwoodjs/router', - '@redwoodjs/auth-*', + '@redwoodjs/auth-*-api', + '@redwoodjs/auth-*-web', ], }), rscEnabled && rscRoutesAutoLoader(), diff --git a/packages/vite/src/rsc/rscBuildForSsr.ts b/packages/vite/src/rsc/rscBuildForSsr.ts index 7506955100a0..d374c9143baa 100644 --- a/packages/vite/src/rsc/rscBuildForSsr.ts +++ b/packages/vite/src/rsc/rscBuildForSsr.ts @@ -63,12 +63,13 @@ export async function rscBuildForSsr({ plugins: [ cjsInterop({ dependencies: [ - // Skip ESM modules: rwjs/auth, rwjs/web + // Skip ESM modules: rwjs/auth, rwjs/web, rwjs/auth-*-middleware '@redwoodjs/forms', '@redwoodjs/prerender/*', '@redwoodjs/router', '@redwoodjs/router/*', - '@redwoodjs/auth-*', + '@redwoodjs/auth-*-api', + '@redwoodjs/auth-*-web', ], }), rscRoutesAutoLoader(), diff --git a/packages/vite/src/streaming/buildForStreamingServer.ts b/packages/vite/src/streaming/buildForStreamingServer.ts index 56f644037c10..f5576d47c56f 100644 --- a/packages/vite/src/streaming/buildForStreamingServer.ts +++ b/packages/vite/src/streaming/buildForStreamingServer.ts @@ -20,11 +20,12 @@ export async function buildForStreamingServer({ plugins: [ cjsInterop({ dependencies: [ - // Skip ESM modules: rwjs/auth, rwjs/web + // Skip ESM modules: rwjs/auth, rwjs/web, rwjs/auth-*-middleware '@redwoodjs/forms', '@redwoodjs/prerender/*', '@redwoodjs/router', - '@redwoodjs/auth-*', + '@redwoodjs/auth-*-api', + '@redwoodjs/auth-*-web', ], }), ], diff --git a/yarn.lock b/yarn.lock index a1085eb55110..5b55bd1b0862 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7544,12 +7544,15 @@ __metadata: version: 0.0.0-use.local resolution: "@redwoodjs/auth-dbauth-middleware@workspace:packages/auth-providers/dbAuth/middleware" dependencies: + "@arethetypeswrong/cli": "npm:0.15.3" "@redwoodjs/api": "workspace:*" "@redwoodjs/auth-dbauth-api": "workspace:*" "@redwoodjs/framework-tools": "workspace:*" "@redwoodjs/graphql-server": "workspace:*" "@redwoodjs/web": "workspace:*" "@types/aws-lambda": "npm:8.10.138" + concurrently: "npm:8.2.2" + publint: "npm:0.2.8" ts-toolbelt: "npm:9.6.0" tsx: "npm:4.15.6" typescript: "npm:5.4.5"