From 4e6430be669971912c725e541fa5021cfc965c07 Mon Sep 17 00:00:00 2001 From: Jon Vivian <2586037+4leite@users.noreply.github.com> Date: Fri, 10 May 2024 02:24:32 +1200 Subject: [PATCH] Relative imports (#63) * revert to relative paths for libraries rather than introduce more build steps https://github.com/Microsoft/TypeScript/issues/15479 * clean up packages --- .changeset/twelve-pumpkins-shake.md | 13 +++++++ .../adapter-turso/src/db/next-auth-adapter.ts | 4 +- oberoncms/adapter-turso/src/index.ts | 6 +-- oberoncms/adapter-turso/tsconfig.json | 6 +-- .../adapter-vercel-postgres/drizzle.config.ts | 2 +- .../adapter-vercel-postgres/src/db/client.ts | 2 +- .../src/db/next-auth-adapter.ts | 2 +- .../adapter-vercel-postgres/src/index.ts | 8 ++-- .../adapter-vercel-postgres/tsconfig.json | 6 +-- oberoncms/core/src/adapter.tsx | 2 +- oberoncms/core/src/app/schema.ts | 7 +++- oberoncms/core/src/auth/next-auth.ts | 13 +++---- oberoncms/core/src/components/all-pages.tsx | 4 +- oberoncms/core/src/components/editor.tsx | 6 +-- oberoncms/core/src/components/images.tsx | 14 ++++--- oberoncms/core/src/components/preview.tsx | 2 +- oberoncms/core/src/components/puck-menu.tsx | 2 +- oberoncms/core/src/components/users.tsx | 4 +- oberoncms/core/src/editor.tsx | 12 +++--- oberoncms/core/src/hooks/use-oberon-images.ts | 17 +++++---- oberoncms/core/src/hooks/use-oberon.ts | 2 +- oberoncms/core/tsconfig.json | 6 +-- .../upload-thing/src/blocks/image-field.tsx | 8 ++-- oberoncms/upload-thing/tsconfig.json | 6 +-- package.json | 5 ++- packages/dev/package.json | 3 +- packages/dev/src/vite.config.ts | 19 ++++++++-- packages/dev/tsconfig.json | 6 +-- packages/ui/package.json | 1 + packages/ui/src/components/date.tsx | 11 ++++++ packages/ui/src/date.ts | 1 + packages/ui/src/theme/mode-toggle.tsx | 4 +- packages/ui/src/theme/theme-editor-menu.tsx | 14 +++---- packages/ui/tsconfig.json | 6 +-- packages/utils/src/index.ts | 4 -- packages/utils/tsconfig.json | 6 +-- pnpm-lock.yaml | 37 ------------------- puck/blocks/tsconfig.json | 6 +-- .../toolbar-plugin/block-format-dropdown.tsx | 6 +-- .../element-format-dropdown.tsx | 2 +- .../lexical/plugins/toolbar-plugin/index.tsx | 10 ++--- .../lexical/ui/button/index.tsx | 2 +- .../lexical/ui/dropdown-menu/index.tsx | 2 +- puck/rich-text/tsconfig.json | 6 +-- scripts/clean-package.mjs | 29 +++++++++------ turbo.json | 4 +- 46 files changed, 155 insertions(+), 183 deletions(-) create mode 100644 .changeset/twelve-pumpkins-shake.md create mode 100644 packages/ui/src/components/date.tsx create mode 100644 packages/ui/src/date.ts diff --git a/.changeset/twelve-pumpkins-shake.md b/.changeset/twelve-pumpkins-shake.md new file mode 100644 index 00000000..b0b5594f --- /dev/null +++ b/.changeset/twelve-pumpkins-shake.md @@ -0,0 +1,13 @@ +--- +"@oberoncms/adapter-vercel-postgres": minor +"@oberoncms/adapter-turso": minor +"@oberoncms/upload-thing": minor +"@oberoncms/core": minor +"@tohuhono/utils": minor +"@tohuhono/puck-rich-text": minor +"@tohuhono/dev": minor +"@tohuhono/ui": minor +"@tohuhono/puck-blocks": minor +--- + +Reverted to relative imports because typescript team refuses to transpile declaration files diff --git a/oberoncms/adapter-turso/src/db/next-auth-adapter.ts b/oberoncms/adapter-turso/src/db/next-auth-adapter.ts index a5114316..136d5c3a 100644 --- a/oberoncms/adapter-turso/src/db/next-auth-adapter.ts +++ b/oberoncms/adapter-turso/src/db/next-auth-adapter.ts @@ -1,13 +1,13 @@ import { randomUUID } from "crypto" import { eq, and } from "drizzle-orm" import type { Adapter } from "@auth/core/adapters" +import { db } from "../db/client" import { users, accounts, sessions, verificationTokens, -} from "src/db/schema/next-auth-schema" -import { db } from "src/db/client" +} from "../db/schema/next-auth-schema" function LibsqlDrizzleAdapter(client: typeof db) { return { diff --git a/oberoncms/adapter-turso/src/index.ts b/oberoncms/adapter-turso/src/index.ts index d583b064..633f9eab 100644 --- a/oberoncms/adapter-turso/src/index.ts +++ b/oberoncms/adapter-turso/src/index.ts @@ -3,10 +3,10 @@ import "server-only" import { eq } from "drizzle-orm" import { type OberonDatabaseAdapter } from "@oberoncms/core" -import { db } from "src/db/client" -import { images, pages, users } from "src/db/schema" +import { images, pages, users } from "./db/schema" +import { db } from "./db/client" -import { authAdapter } from "@/db/next-auth-adapter" +import { authAdapter } from "./db/next-auth-adapter" export const oberonAdapter: OberonDatabaseAdapter = { ...authAdapter, diff --git a/oberoncms/adapter-turso/tsconfig.json b/oberoncms/adapter-turso/tsconfig.json index 25c2108c..a04efbfa 100644 --- a/oberoncms/adapter-turso/tsconfig.json +++ b/oberoncms/adapter-turso/tsconfig.json @@ -1,13 +1,9 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "baseUrl": ".", "rootDir": "./src", "outDir": "./dist", - "jsx": "react-jsx", - "paths": { - "@/*": ["./src/*"] - } + "jsx": "react-jsx" }, "include": ["src", "scripts"], "exclude": ["node_modules", "dist", "**/*.spec.ts", "**/*.spec.tsx"] diff --git a/oberoncms/adapter-vercel-postgres/drizzle.config.ts b/oberoncms/adapter-vercel-postgres/drizzle.config.ts index 71d49f40..43dd54af 100644 --- a/oberoncms/adapter-vercel-postgres/drizzle.config.ts +++ b/oberoncms/adapter-vercel-postgres/drizzle.config.ts @@ -1,4 +1,4 @@ -import "@/db/env-config" +import "./src/db/env-config" import type { Config } from "drizzle-kit" diff --git a/oberoncms/adapter-vercel-postgres/src/db/client.ts b/oberoncms/adapter-vercel-postgres/src/db/client.ts index 112c3db1..bba94f35 100644 --- a/oberoncms/adapter-vercel-postgres/src/db/client.ts +++ b/oberoncms/adapter-vercel-postgres/src/db/client.ts @@ -1,4 +1,4 @@ -import "@/db/env-config" +import "./env-config" import { drizzle } from "drizzle-orm/vercel-postgres" import { sql } from "@vercel/postgres" import * as schema from "./schema" diff --git a/oberoncms/adapter-vercel-postgres/src/db/next-auth-adapter.ts b/oberoncms/adapter-vercel-postgres/src/db/next-auth-adapter.ts index 65a3c423..8f612994 100644 --- a/oberoncms/adapter-vercel-postgres/src/db/next-auth-adapter.ts +++ b/oberoncms/adapter-vercel-postgres/src/db/next-auth-adapter.ts @@ -1,5 +1,5 @@ -import { db } from "src/db/client" import { type Adapter } from "@auth/core/adapters" import { DrizzleAdapter } from "@auth/drizzle-adapter" +import { db } from "../db/client" export const adapter = DrizzleAdapter(db) satisfies Adapter diff --git a/oberoncms/adapter-vercel-postgres/src/index.ts b/oberoncms/adapter-vercel-postgres/src/index.ts index 48439d0d..e320e012 100644 --- a/oberoncms/adapter-vercel-postgres/src/index.ts +++ b/oberoncms/adapter-vercel-postgres/src/index.ts @@ -3,11 +3,9 @@ import "server-only" import { eq } from "drizzle-orm" import { type OberonDatabaseAdapter } from "@oberoncms/core" -// import { ourUploadthing } from "src/puck/uploadthing/api" // TODO uploadthing -import { db } from "src/db/client" -import { images, pages, users } from "src/db/schema" - -import { adapter } from "@/db/next-auth-adapter" +import { db } from "./db/client" +import { images, pages, users } from "./db/schema" +import { adapter } from "./db/next-auth-adapter" export const databaseAdapter: OberonDatabaseAdapter = { ...adapter, diff --git a/oberoncms/adapter-vercel-postgres/tsconfig.json b/oberoncms/adapter-vercel-postgres/tsconfig.json index 25c2108c..a04efbfa 100644 --- a/oberoncms/adapter-vercel-postgres/tsconfig.json +++ b/oberoncms/adapter-vercel-postgres/tsconfig.json @@ -1,13 +1,9 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "baseUrl": ".", "rootDir": "./src", "outDir": "./dist", - "jsx": "react-jsx", - "paths": { - "@/*": ["./src/*"] - } + "jsx": "react-jsx" }, "include": ["src", "scripts"], "exclude": ["node_modules", "dist", "**/*.spec.ts", "**/*.spec.tsx"] diff --git a/oberoncms/core/src/adapter.tsx b/oberoncms/core/src/adapter.tsx index ed4d9692..0fe9cdb0 100644 --- a/oberoncms/core/src/adapter.tsx +++ b/oberoncms/core/src/adapter.tsx @@ -17,7 +17,7 @@ import { type OberonDatabaseAdapter, type OberonAdapter, type OberonPlugin, -} from "@/app/schema" +} from "./app/schema" export function initAdapter({ databaseAdapter, diff --git a/oberoncms/core/src/app/schema.ts b/oberoncms/core/src/app/schema.ts index 056196df..f54ef13f 100644 --- a/oberoncms/core/src/app/schema.ts +++ b/oberoncms/core/src/app/schema.ts @@ -3,6 +3,7 @@ import { Data } from "@measured/puck" import { Route } from "next" import type { Config } from "@measured/puck" import type { Adapter as AuthAdapter } from "@auth/core/adapters" +import type { NextAuthResult } from "next-auth" export type OberonConfig = { blocks: Config["components"] @@ -12,6 +13,10 @@ export type ClientAction = "edit" | "preview" | "users" | "images" | "pages" export type AdapterActionGroup = "cms" | "users" | "images" | "pages" export type AdapterPermission = "read" | "write" +export type OberonAuth = NextAuthResult & { + getRole: () => Promise<"user" | "admin" | null> +} + export const INITIAL_DATA = { content: [], root: { props: { title: "" } }, @@ -127,7 +132,7 @@ export type OberonActions = { ) => Promise | null> getAllUsers: () => Promise getAllImages: () => Promise - addImage: (data: z.infer) => Promise + addImage: (data: OberonImage) => Promise deleteImage: (key: OberonImage["key"]) => Promise // TODO uploadthing addPage: (page: OberonPage) => Promise deletePage: (data: z.infer) => Promise diff --git a/oberoncms/core/src/auth/next-auth.ts b/oberoncms/core/src/auth/next-auth.ts index 5fa3e602..93d6f795 100644 --- a/oberoncms/core/src/auth/next-auth.ts +++ b/oberoncms/core/src/auth/next-auth.ts @@ -5,6 +5,7 @@ import NextAuth from "next-auth" import { NextRequest } from "next/server" import { redirect } from "next/navigation" import type { Adapter } from "@auth/core/adapters" +import type { OberonAuth } from ".." const masterEmail = process.env.MASTER_EMAIL || null @@ -36,7 +37,7 @@ export function initAuth({ token: string url: string }) => Promise -}) { +}): OberonAuth { const config = { pages: { verifyRequest: "/api/auth/verify", @@ -131,9 +132,7 @@ export function initAuth({ return session?.user?.role || null } - const POST = nextAuth.handlers.POST - - const GET = (req: NextRequest) => { + const GET = async (req: NextRequest) => { // safe links bot workaround https://github.com/nextauthjs/next-auth/issues/4965 if ( req.method === "GET" && @@ -153,11 +152,11 @@ export function initAuth({ } return { - getRole, - auth, + ...nextAuth, handlers: { - POST, + ...nextAuth.handlers, GET, }, + getRole, } } diff --git a/oberoncms/core/src/components/all-pages.tsx b/oberoncms/core/src/components/all-pages.tsx index abb54849..7ea0378f 100644 --- a/oberoncms/core/src/components/all-pages.tsx +++ b/oberoncms/core/src/components/all-pages.tsx @@ -13,8 +13,8 @@ import { FormItem, FormMessage, } from "@tohuhono/ui/form" -import { useOberonActions } from "@/hooks/use-oberon" -import { PageSchema, type OberonPage } from "@/app/schema" +import { useOberonActions } from "../hooks/use-oberon" +import { PageSchema, type OberonPage } from "../app/schema" const useOberonPages = (pages: OberonPage[]) => { const { deletePage, addPage } = useOberonActions() diff --git a/oberoncms/core/src/components/editor.tsx b/oberoncms/core/src/components/editor.tsx index 3a832aeb..3b8d3524 100644 --- a/oberoncms/core/src/components/editor.tsx +++ b/oberoncms/core/src/components/editor.tsx @@ -5,10 +5,10 @@ import "@measured/puck/dist/index.css" import { Config, Data, Puck, usePuck } from "@measured/puck" import { Button } from "@tohuhono/ui/button" import { useState } from "react" +import { useLocalData } from "../hooks/use-local-data" +import { INITIAL_DATA } from "../app/schema" +import { useOberonActions } from "../hooks/use-oberon" import { PuckMenu } from "./puck-menu" -import { useOberonActions } from "@/hooks/use-oberon" -import { useLocalData } from "@/hooks/use-local-data" -import { INITIAL_DATA } from "@/app/schema" const Header = ({ path, diff --git a/oberoncms/core/src/components/images.tsx b/oberoncms/core/src/components/images.tsx index 086f7cc7..09cb0aa4 100644 --- a/oberoncms/core/src/components/images.tsx +++ b/oberoncms/core/src/components/images.tsx @@ -11,10 +11,11 @@ import { filesize } from "filesize" import Link from "next/link" import { Route } from "next" import { Button } from "@tohuhono/ui/button" +import { LocalDate } from "@tohuhono/ui/date" import Image from "next/image" -import { format } from "@tohuhono/utils" -import { useOberonActions } from "@/hooks/use-oberon" -import type { OberonImage } from "@/app/schema" + +import { useOberonActions } from "../hooks/use-oberon" +import type { OberonImage } from "../app/schema" const useOberonImages = (images: OberonImage[]) => { const { deleteImage } = useOberonActions() @@ -51,7 +52,8 @@ export function Images({ images: initialImages }: { images: OberonImage[] }) { By - {images.map(({ key, alt, size, updatedAt, updatedBy, url, pending }) => { + {images.map(({ key, alt, size, updatedAt, updatedBy, url }) => { + const pending = false return ( @@ -59,7 +61,9 @@ export function Images({ images: initialImages }: { images: OberonImage[] }) {
{alt}
{filesize(size)}
-
{format(updatedAt)}
+
+ +
{updatedBy}