From f249b35cacefae6b0c58d2dfdcce706650dbbde2 Mon Sep 17 00:00:00 2001 From: rogermparent Date: Sun, 22 Mar 2026 21:37:34 -0400 Subject: [PATCH 1/2] Rename packages and fix prettierignore and run prettier --- .prettierignore | 5 +- README.md | 4 +- package.json | 4 +- packages/component-library/components.json | 10 +- .../components/Button/index.tsx | 2 +- .../components/Form/inputs/Image/index.tsx | 2 +- .../Form/inputs/Markdown/Inline/index.tsx | 2 +- .../Form/inputs/Markdown/common.tsx | 2 +- .../components/Form/inputs/Markdown/index.tsx | 4 +- .../components/StickyVideoPlayer/index.tsx | 2 +- .../components/ui/button.tsx | 2 +- .../components/ui/dialog.tsx | 2 +- packages/component-library/package.json | 6 +- packages/component-library/tsconfig.json | 2 +- .../content-engine/content/deleteContent.ts | 8 +- packages/content-engine/content/filesystem.ts | 14 +- .../content-engine/content/rebuildIndex.ts | 8 +- .../content-engine/content/updateContent.ts | 8 +- .../content/updateReferences.ts | 12 +- .../demo/app/bookmarks/[slug]/page.tsx | 4 +- .../demo/app/bookmarks/new/page.tsx | 10 +- .../demo/app/notes/[slug]/delete/page.tsx | 6 +- .../demo/app/notes/[slug]/edit/page.tsx | 6 +- .../demo/app/notes/[slug]/page.tsx | 4 +- .../content-engine/demo/app/notes/form.tsx | 2 +- .../demo/app/notes/new/page.tsx | 11 +- packages/content-engine/demo/app/page.tsx | 4 +- packages/content-engine/demo/lib/bookmarks.ts | 7 +- packages/content-engine/demo/lib/notes.ts | 54 ++-- packages/content-engine/demo/next.config.ts | 2 +- packages/content-engine/demo/package.json | 2 +- packages/content-engine/demo/tsconfig.json | 15 +- packages/content-engine/package.json | 2 +- .../components/Form/Items/index.tsx | 8 +- .../components/Form/fields.tsx | 2 +- .../components/View/index.tsx | 2 +- .../controller/filesystemDirectories.ts | 2 +- .../controller/parseFormData.ts | 2 +- packages/menus-collection/package.json | 8 +- packages/next-static-image/package.json | 2 +- .../components/Form/fields.tsx | 10 +- .../components/View/index.tsx | 2 +- .../controller/data/readIndex.ts | 2 +- .../controller/filesystemDirectories.ts | 2 +- .../controller/parseFormData.ts | 4 +- packages/pages-collection/package.json | 8 +- .../components/Form/fields.tsx | 10 +- .../components/View/index.tsx | 2 +- .../controller/data/readIndex.ts | 2 +- .../controller/filesystemDirectories.ts | 2 +- .../controller/parseFormData.ts | 4 +- packages/projects-collection/package.json | 8 +- pnpm-lock.yaml | 244 +++++++++--------- .../Homepage/AboutSection/index.tsx | 4 +- .../Homepage/ContactSection/index.tsx | 2 +- .../components/Homepage/ProjectCard/index.tsx | 2 +- .../HomepageContactLinksInput/index.tsx | 6 +- .../HomepageProjectsInput/index.tsx | 8 +- .../common/homepage-controller/actions.ts | 2 +- .../common/homepage-controller/paths.ts | 2 +- .../common/homepage-controller/types.ts | 2 +- websites/portfolio/common/package.json | 8 +- websites/portfolio/editor/package.json | 12 +- .../(menus)/menus/edit/[...slug]/form.tsx | 10 +- .../(menus)/menus/edit/[...slug]/page.tsx | 6 +- .../app/(editor)/(pages)/[...slug]/page.tsx | 6 +- .../(pages)/pages/edit/[...slug]/form.tsx | 10 +- .../(pages)/pages/edit/[...slug]/page.tsx | 2 +- .../app/(editor)/(pages)/pages/new/form.tsx | 8 +- .../src/app/(editor)/(pages)/pages/page.tsx | 2 +- .../projects/edit/[...slug]/form.tsx | 10 +- .../projects/edit/[...slug]/page.tsx | 2 +- .../(editor)/(projects)/projects/new/form.tsx | 8 +- .../app/(editor)/(projects)/projects/page.tsx | 2 +- .../editor/src/app/(editor)/build/route.ts | 2 +- .../editor/src/app/(editor)/deploy/route.ts | 2 +- .../src/app/(editor)/export/exporter.tsx | 2 +- .../app/(editor)/homepage/HomepageInput.tsx | 4 +- .../(editor)/homepage/UploadsList/index.tsx | 10 +- .../editor/src/app/(editor)/homepage/page.tsx | 6 +- .../(portfolio)/project/[...slug]/page.tsx | 6 +- .../src/app/image/[...filePath]/route.ts | 2 +- websites/portfolio/editor/src/auth.ts | 2 +- .../src/components/SiteHeader/index.tsx | 2 +- websites/portfolio/export/package.json | 8 +- .../components/AppLayout/AppProviders.tsx | 4 +- .../common/components/AppLayout/index.tsx | 4 +- .../components/BookmarkButton/index.tsx | 2 +- .../common/components/ClientList/index.tsx | 2 +- .../FeaturedRecipeDetailPage/index.tsx | 4 +- .../FirstFeaturedRecipeIndexPage.tsx | 8 +- .../FeaturedRecipeIndexPage/index.tsx | 6 +- .../FeaturedRecipeIndexPage/shared.tsx | 4 +- .../components/Form/FeaturedRecipe/index.tsx | 8 +- .../common/components/Form/Image/index.tsx | 6 +- .../components/Form/Ingredients/index.tsx | 10 +- .../InstructionTextInput/index.tsx | 4 +- .../components/Form/Instructions/index.tsx | 8 +- .../components/Form/PasteField/index.tsx | 4 +- .../components/Form/RecipeMarkdown/index.tsx | 2 +- .../common/components/Form/Timeline/index.tsx | 14 +- .../common/components/Form/index.tsx | 18 +- .../Form/inputs/RecipeSelect/index.tsx | 7 +- .../components/List/FeaturedRecipe/index.tsx | 2 +- .../common/components/PageLayout/index.tsx | 2 +- .../common/components/RecipeImage/index.tsx | 4 +- .../RecipeIndexPage/FirstRecipeIndexPage.tsx | 4 +- .../components/RecipeIndexPage/index.tsx | 6 +- .../common/components/RenderedPage/index.tsx | 4 +- .../components/SearchForm/SearchFormModal.tsx | 2 +- .../components/SearchForm/SearchInput.tsx | 4 +- .../SearchForm/SearchPagination.tsx | 2 +- .../SearchForm/SearchResultsModal.tsx | 12 +- .../common/components/SearchList/index.tsx | 2 +- .../components/View/Ingredients/index.tsx | 4 +- .../View/Instructions/VideoTime.tsx | 2 +- .../components/View/Instructions/index.tsx | 4 +- .../common/components/View/JsonLD/index.tsx | 2 +- .../components/View/Multiplier/index.tsx | 4 +- .../common/components/View/index.tsx | 6 +- .../common/controller/data/read.ts | 4 +- .../controller/data/readFeaturedRecipes.ts | 4 +- .../controller/featuredRecipeContentConfig.ts | 2 +- .../controller/featuredRecipeFormState.ts | 3 +- .../controller/filesystemDirectories.ts | 2 +- .../common/controller/formState.ts | 10 +- .../common/controller/recipeContentConfig.ts | 2 +- websites/recipe-website/common/package.json | 8 +- .../common/util/importRecipeData.ts | 26 +- .../recipe-website/editor/.prettierignore | 2 - .../controller/actions/editorContentConfig.ts | 2 +- .../controller/actions/featuredRecipes.ts | 4 +- .../controller/actions/genericActions.ts | 8 +- .../editor/controller/actions/index.ts | 10 +- .../controller/parseFeaturedRecipeFormData.ts | 4 +- .../editor/controller/parseFormData.ts | 4 +- .../cypress/fixtures/yt-dlp/ytdlp-mimic.mjs | 4 +- .../editor/migrations/0_rewrite/up.ts | 2 +- websites/recipe-website/editor/package.json | 10 +- .../editor/scripts/create-user.ts | 2 +- .../(menus)/menus/edit/[...slug]/form.tsx | 10 +- .../(menus)/menus/edit/[...slug]/page.tsx | 6 +- .../app/(editor)/(pages)/[...slug]/page.tsx | 4 +- .../(pages)/pages/edit/[...slug]/form.tsx | 10 +- .../(pages)/pages/edit/[...slug]/page.tsx | 2 +- .../app/(editor)/(pages)/pages/new/form.tsx | 8 +- .../src/app/(editor)/(pages)/pages/page.tsx | 2 +- .../src/app/(editor)/export/exportAction.ts | 2 +- .../src/app/(editor)/export/exporter.tsx | 2 +- .../src/app/(editor)/git/BranchSelector.tsx | 2 +- .../src/app/(editor)/git/CreateBranchForm.tsx | 4 +- .../src/app/(editor)/git/CreateRemoteForm.tsx | 4 +- .../src/app/(editor)/git/RemoteSelector.tsx | 2 +- .../editor/src/app/(editor)/git/ui.tsx | 6 +- .../app/(editor)/settings/SettingsForm.tsx | 4 +- .../editor/src/app/(editor)/settings/page.tsx | 2 +- .../featured-recipe/[slug]/edit/form.tsx | 2 +- .../(recipes)/featured-recipe/[slug]/page.tsx | 5 +- .../(recipes)/featured-recipe/new/form.tsx | 2 +- .../src/app/(recipes)/new-recipe/form.tsx | 4 +- .../app/(recipes)/recipe/[slug]/copy/form.tsx | 2 +- .../app/(recipes)/recipe/[slug]/edit/form.tsx | 4 +- .../src/app/(recipes)/recipe/[slug]/page.tsx | 5 +- .../editor/src/app/(recipes)/scriptAction.ts | 2 +- .../recipe/[slug]/uploads/[filename]/route.ts | 2 +- .../src/app/image/[...filePath]/route.ts | 2 +- .../src/app/uploads/[filename]/route.ts | 2 +- websites/recipe-website/editor/src/auth.ts | 2 +- websites/recipe-website/export/package.json | 6 +- .../src/app/(recipes)/[...slug]/page.tsx | 4 +- .../src/app/(recipes)/recipes/[page]/page.tsx | 4 +- websites/resume-builder/package.json | 4 +- .../src/app/(resumes)/new-resume/form.tsx | 2 +- .../src/app/(resumes)/settings/page.tsx | 2 +- .../components/Resume/Form/Create/index.tsx | 8 +- .../Resume/Form/Education/index.tsx | 6 +- .../Resume/Form/Experience/index.tsx | 8 +- .../components/Resume/Form/Projects/index.tsx | 8 +- .../components/Resume/Form/Update/index.tsx | 8 +- .../src/components/Resume/View/index.tsx | 2 +- .../src/controller/actions/create.ts | 5 +- .../src/controller/actions/delete.ts | 2 +- .../src/controller/actions/rebuildIndex.ts | 2 +- .../src/controller/actions/update.ts | 9 +- .../src/controller/data/read.ts | 2 +- .../src/controller/data/readIndex.ts | 2 +- .../src/controller/parseFormData.ts | 4 +- .../src/controller/resumeContentConfig.ts | 7 +- websites/resume-builder/tsconfig.json | 15 +- 189 files changed, 639 insertions(+), 583 deletions(-) delete mode 100644 websites/recipe-website/editor/.prettierignore diff --git a/.prettierignore b/.prettierignore index 78a1f2bd..32cd530b 100644 --- a/.prettierignore +++ b/.prettierignore @@ -2,4 +2,7 @@ **/*/node_modules **/*/content **/*/test-content -pnpm-lock.yaml \ No newline at end of file +pnpm-lock.yaml +**/*/editor/content +**/*/editor/test-content +**/*/export/out \ No newline at end of file diff --git a/README.md b/README.md index ba8454aa..7f5419e5 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,9 @@ The projects in [`packages`](packages) are libraries that could be published as Generally, a website made with these packages will span two projects: an editor and a website. The editor is a dynamic app that has serves as a custom-built CMS, and that CMS calls the website project to build a deployable static website with that content. Having this editor/website pattern combines the accessibility of a dynamic graphical CMS with the effortless hosting of a static website. -Reusable packages in this repo aim to be composable, allowing any implementation full control over the process of creating content. For example, a website can check in with any authentication service that's compatible with NextJS before calling the functions from `content-engine` to persist content to LMDB and the filesystem. +Reusable packages in this repo aim to be composable, allowing any implementation full control over the process of creating content. For example, a website can check in with any authentication service that's compatible with NextJS before calling the functions from `@discontent/cms` to persist content to LMDB and the filesystem. -One standout in this monorepo is [`next-static-image`](packages/next-static-image), which enables build-time optimization of dynamic images in a NextJS static export project with minimal API changes. This package may graduate into its own repo eventually, but the websites in this repo serve as its best test target currently. +One standout in this monorepo is [`@discontent/next-static-image`](packages/next-static-image), which enables build-time optimization of dynamic images in a NextJS static export project with minimal API changes. This package may graduate into its own repo eventually, but the websites in this repo serve as its best test target currently. The [Recipe Website](websites/recipe-website) project is the most complete implementation of a real-world project using the code in this monorepo, but more are planned in the future. diff --git a/package.json b/package.json index 1f6ff7b6..4b973d5e 100644 --- a/package.json +++ b/package.json @@ -40,8 +40,8 @@ }, "packageManager": "pnpm@10.24.0", "dependencies": { - "component-library": "^1.0.0", - "content-engine": "^1.0.0", + "@discontent/component-library": "^1.0.0", + "@discontent/cms": "^1.0.0", "execa": "^9.6.1", "fdir": "^6.5.0", "fs-extra": "^11.3.3", diff --git a/packages/component-library/components.json b/packages/component-library/components.json index 02c3d729..364f9492 100644 --- a/packages/component-library/components.json +++ b/packages/component-library/components.json @@ -11,11 +11,11 @@ "prefix": "" }, "aliases": { - "components": "component-library/components", - "utils": "component-library/lib/utils", - "ui": "component-library/components/ui", - "lib": "component-library/lib", - "hooks": "component-library/hooks" + "components": "@discontent/component-library/components", + "utils": "@discontent/component-library/lib/utils", + "ui": "@discontent/component-library/components/ui", + "lib": "@discontent/component-library/lib", + "hooks": "@discontent/component-library/hooks" }, "iconLibrary": "lucide" } diff --git a/packages/component-library/components/Button/index.tsx b/packages/component-library/components/Button/index.tsx index 54e9a0ae..a7314d1d 100644 --- a/packages/component-library/components/Button/index.tsx +++ b/packages/component-library/components/Button/index.tsx @@ -3,7 +3,7 @@ import { MouseEventHandler, ReactNode } from "react"; import { buttonVariants, Button as ShadcnButton, -} from "component-library/components/ui/button"; +} from "@discontent/component-library/components/ui/button"; export function Button({ children, diff --git a/packages/component-library/components/Form/inputs/Image/index.tsx b/packages/component-library/components/Form/inputs/Image/index.tsx index 65749bb3..20adeb11 100644 --- a/packages/component-library/components/Form/inputs/Image/index.tsx +++ b/packages/component-library/components/Form/inputs/Image/index.tsx @@ -3,7 +3,7 @@ import { useEffect, useRef, useState } from "react"; import Image from "next/image"; import { FileInput } from "../File"; -import { StaticImageProps } from "next-static-image/src"; +import { StaticImageProps } from "@discontent/next-static-image/src"; import { CheckboxInput } from "../Checkbox"; export function ImageInput({ diff --git a/packages/component-library/components/Form/inputs/Markdown/Inline/index.tsx b/packages/component-library/components/Form/inputs/Markdown/Inline/index.tsx index 13cb38d4..264065b6 100644 --- a/packages/component-library/components/Form/inputs/Markdown/Inline/index.tsx +++ b/packages/component-library/components/Form/inputs/Markdown/Inline/index.tsx @@ -2,7 +2,7 @@ import { DefaultControls, FormatButton, MarkdownInputProps } from "../common"; import clsx from "clsx"; import { MouseEventHandler, useState } from "react"; import { Errors, FieldWrapper, baseInputStyle } from "../../.."; -import StyledMarkdown from "component-library/components/Markdown"; +import StyledMarkdown from "@discontent/component-library/components/Markdown"; export function InlineMarkdownInput({ name, diff --git a/packages/component-library/components/Form/inputs/Markdown/common.tsx b/packages/component-library/components/Form/inputs/Markdown/common.tsx index 73808c36..7b21a038 100644 --- a/packages/component-library/components/Form/inputs/Markdown/common.tsx +++ b/packages/component-library/components/Form/inputs/Markdown/common.tsx @@ -1,5 +1,5 @@ import { MouseEventHandler, ReactNode } from "react"; -import { Button } from "component-library/components/Button"; +import { Button } from "@discontent/component-library/components/Button"; import { MarkdownToJSX } from "markdown-to-jsx/react"; export interface MarkdownControlsProps { diff --git a/packages/component-library/components/Form/inputs/Markdown/index.tsx b/packages/component-library/components/Form/inputs/Markdown/index.tsx index 37cb4608..731fdcfb 100644 --- a/packages/component-library/components/Form/inputs/Markdown/index.tsx +++ b/packages/component-library/components/Form/inputs/Markdown/index.tsx @@ -1,8 +1,8 @@ import { useState } from "react"; import { Errors, FieldWrapper, baseInputStyle } from "../.."; import clsx from "clsx"; -import StyledMarkdown from "component-library/components/Markdown"; -import { Button } from "component-library/components/Button"; +import StyledMarkdown from "@discontent/component-library/components/Markdown"; +import { Button } from "@discontent/component-library/components/Button"; import { DefaultControls, MarkdownInputProps } from "./common"; export function MarkdownInput({ diff --git a/packages/component-library/components/StickyVideoPlayer/index.tsx b/packages/component-library/components/StickyVideoPlayer/index.tsx index ea112071..43e0e280 100644 --- a/packages/component-library/components/StickyVideoPlayer/index.tsx +++ b/packages/component-library/components/StickyVideoPlayer/index.tsx @@ -1,6 +1,6 @@ "use client"; -import { VideoPlayer } from "component-library/components/VideoPlayer"; +import { VideoPlayer } from "@discontent/component-library/components/VideoPlayer"; import { ReactNode, useState } from "react"; import clsx from "clsx"; diff --git a/packages/component-library/components/ui/button.tsx b/packages/component-library/components/ui/button.tsx index c5d48880..56f3186f 100644 --- a/packages/component-library/components/ui/button.tsx +++ b/packages/component-library/components/ui/button.tsx @@ -2,7 +2,7 @@ import * as React from "react"; import { Slot } from "@radix-ui/react-slot"; import { cva, type VariantProps } from "class-variance-authority"; -import { cn } from "component-library/lib/utils"; +import { cn } from "@discontent/component-library/lib/utils"; const buttonVariants = cva( "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", diff --git a/packages/component-library/components/ui/dialog.tsx b/packages/component-library/components/ui/dialog.tsx index 1d4ce440..a4f61605 100644 --- a/packages/component-library/components/ui/dialog.tsx +++ b/packages/component-library/components/ui/dialog.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import * as DialogPrimitive from "@radix-ui/react-dialog"; -import { cn } from "component-library/lib/utils"; +import { cn } from "@discontent/component-library/lib/utils"; const DialogRoot = DialogPrimitive.Root; diff --git a/packages/component-library/package.json b/packages/component-library/package.json index 844a0f37..67c8153d 100644 --- a/packages/component-library/package.json +++ b/packages/component-library/package.json @@ -1,5 +1,5 @@ { - "name": "component-library", + "name": "@discontent/component-library", "version": "1.0.0", "description": "", "main": "index.js", @@ -14,11 +14,11 @@ "@radix-ui/react-slot": "^1.2.4", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "content-engine": "^1.0.0", + "@discontent/cms": "^1.0.0", "github-markdown-css": "^5.8.1", "lucide-react": "^0.563.0", "markdown-to-jsx": "^9.6.1", - "next-static-image": "^0.0.1", + "@discontent/next-static-image": "^0.0.1", "react-markdown": "^10.1.0", "react-player": "^3.4.0", "tailwind-merge": "^3.4.0", diff --git a/packages/component-library/tsconfig.json b/packages/component-library/tsconfig.json index 236eca38..0d9c00c8 100644 --- a/packages/component-library/tsconfig.json +++ b/packages/component-library/tsconfig.json @@ -19,7 +19,7 @@ } ], "paths": { - "component-library/*": ["./*"] + "@discontent/component-library/*": ["./*"] } }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], diff --git a/packages/content-engine/content/deleteContent.ts b/packages/content-engine/content/deleteContent.ts index 589df5c4..6d66f33f 100644 --- a/packages/content-engine/content/deleteContent.ts +++ b/packages/content-engine/content/deleteContent.ts @@ -24,11 +24,9 @@ import type { ContentTypeConfig, DeleteContentOptions } from "./types"; * }); * ``` */ -export async function deleteContent< - TData, - TIndexValue, - TKey extends Key, ->(options: DeleteContentOptions): Promise { +export async function deleteContent( + options: DeleteContentOptions, +): Promise { const { config, slug, diff --git a/packages/content-engine/content/filesystem.ts b/packages/content-engine/content/filesystem.ts index e6daf97e..6e9a0353 100644 --- a/packages/content-engine/content/filesystem.ts +++ b/packages/content-engine/content/filesystem.ts @@ -294,13 +294,23 @@ export async function processUploadChanges( existingFile !== undefined && (uploadData === undefined || uploadData.file || uploadData.fileImportUrl) ) { - paths.push(relative(baseDir, getUploadFilePath(config, slug, existingFile, contentDirectory))); + paths.push( + relative( + baseDir, + getUploadFilePath(config, slug, existingFile, contentDirectory), + ), + ); await removeUploadFile(config, slug, existingFile, contentDirectory); } // Write new file if provided if (uploadData) { - paths.push(relative(baseDir, getUploadFilePath(config, slug, uploadData.fileName, contentDirectory))); + paths.push( + relative( + baseDir, + getUploadFilePath(config, slug, uploadData.fileName, contentDirectory), + ), + ); await writeUploadFile(config, slug, uploadData, contentDirectory); } diff --git a/packages/content-engine/content/rebuildIndex.ts b/packages/content-engine/content/rebuildIndex.ts index 8529e2ec..4be6e03e 100644 --- a/packages/content-engine/content/rebuildIndex.ts +++ b/packages/content-engine/content/rebuildIndex.ts @@ -18,11 +18,9 @@ import type { ContentTypeConfig, RebuildIndexOptions } from "./types"; * }); * ``` */ -export async function rebuildIndex< - TData, - TIndexValue, - TKey extends Key, ->(options: RebuildIndexOptions): Promise { +export async function rebuildIndex( + options: RebuildIndexOptions, +): Promise { const { config, contentDirectory: providedContentDirectory } = options; const contentDirectory = providedContentDirectory || getContentDirectory(); diff --git a/packages/content-engine/content/updateContent.ts b/packages/content-engine/content/updateContent.ts index 7941d2a8..63414e0c 100644 --- a/packages/content-engine/content/updateContent.ts +++ b/packages/content-engine/content/updateContent.ts @@ -69,11 +69,9 @@ export async function defaultUpdateUploadsProcessor( * }); * ``` */ -export async function updateContent< - TData, - TIndexValue, - TKey extends Key, ->(options: UpdateContentOptions): Promise { +export async function updateContent( + options: UpdateContentOptions, +): Promise { const { config, slug, diff --git a/packages/content-engine/content/updateReferences.ts b/packages/content-engine/content/updateReferences.ts index 295af48a..5c30ffd2 100644 --- a/packages/content-engine/content/updateReferences.ts +++ b/packages/content-engine/content/updateReferences.ts @@ -165,7 +165,11 @@ async function updateReferencesViaIndex< result.updatedCount++; result.updatedSlugs.push(slug); - const filePath = getContentFilePath(config as ContentTypeConfig, slug, contentDirectory); + const filePath = getContentFilePath( + config as ContentTypeConfig, + slug, + contentDirectory, + ); result.updatedPaths.push(relative(contentDirectory, filePath)); } catch (error) { result.errors.push({ @@ -262,7 +266,11 @@ async function updateReferencesViaFileScan< result.updatedCount++; result.updatedSlugs.push(slug); - const filePath = getContentFilePath(config as ContentTypeConfig, slug, contentDirectory); + const filePath = getContentFilePath( + config as ContentTypeConfig, + slug, + contentDirectory, + ); result.updatedPaths.push(relative(contentDirectory, filePath)); } } catch (error) { diff --git a/packages/content-engine/demo/app/bookmarks/[slug]/page.tsx b/packages/content-engine/demo/app/bookmarks/[slug]/page.tsx index 556916c9..8242b120 100644 --- a/packages/content-engine/demo/app/bookmarks/[slug]/page.tsx +++ b/packages/content-engine/demo/app/bookmarks/[slug]/page.tsx @@ -1,7 +1,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; -import { readContentFile } from "content-engine/content/readContentFile"; -import { getContentDirectory } from "content-engine/fs/getContentDirectory"; +import { readContentFile } from "@discontent/cms/content/readContentFile"; +import { getContentDirectory } from "@discontent/cms/fs/getContentDirectory"; import { bookmarkConfig, BookmarkIndexKey, diff --git a/packages/content-engine/demo/app/bookmarks/new/page.tsx b/packages/content-engine/demo/app/bookmarks/new/page.tsx index c9028fe6..a6ccec57 100644 --- a/packages/content-engine/demo/app/bookmarks/new/page.tsx +++ b/packages/content-engine/demo/app/bookmarks/new/page.tsx @@ -1,6 +1,6 @@ import { redirect } from "next/navigation"; -import { createContent } from "content-engine/content/createContent"; -import { getContentDirectory } from "content-engine/fs/getContentDirectory"; +import { createContent } from "@discontent/cms/content/createContent"; +import { getContentDirectory } from "@discontent/cms/fs/getContentDirectory"; import { bookmarkConfig, bookmarkFormSchema, @@ -52,7 +52,11 @@ export default async function NewBookmarkPage({ searchParams }: PageProps) {

Create New Bookmark

- +
); diff --git a/packages/content-engine/demo/app/notes/[slug]/delete/page.tsx b/packages/content-engine/demo/app/notes/[slug]/delete/page.tsx index 7c5eaa80..baf41dce 100644 --- a/packages/content-engine/demo/app/notes/[slug]/delete/page.tsx +++ b/packages/content-engine/demo/app/notes/[slug]/delete/page.tsx @@ -1,8 +1,8 @@ import { redirect, notFound } from "next/navigation"; import Link from "next/link"; -import { readContentFile } from "content-engine/content/readContentFile"; -import { deleteContent } from "content-engine/content/deleteContent"; -import { getContentDirectory } from "content-engine/fs/getContentDirectory"; +import { readContentFile } from "@discontent/cms/content/readContentFile"; +import { deleteContent } from "@discontent/cms/content/deleteContent"; +import { getContentDirectory } from "@discontent/cms/fs/getContentDirectory"; import { noteConfig, NoteIndexValue, diff --git a/packages/content-engine/demo/app/notes/[slug]/edit/page.tsx b/packages/content-engine/demo/app/notes/[slug]/edit/page.tsx index 1f33446c..7c3b1062 100644 --- a/packages/content-engine/demo/app/notes/[slug]/edit/page.tsx +++ b/packages/content-engine/demo/app/notes/[slug]/edit/page.tsx @@ -1,7 +1,7 @@ import { redirect, notFound } from "next/navigation"; -import { readContentFile } from "content-engine/content/readContentFile"; -import { updateContent } from "content-engine/content/updateContent"; -import { getContentDirectory } from "content-engine/fs/getContentDirectory"; +import { readContentFile } from "@discontent/cms/content/readContentFile"; +import { updateContent } from "@discontent/cms/content/updateContent"; +import { getContentDirectory } from "@discontent/cms/fs/getContentDirectory"; import { noteConfig, noteFormSchema, diff --git a/packages/content-engine/demo/app/notes/[slug]/page.tsx b/packages/content-engine/demo/app/notes/[slug]/page.tsx index f9e23423..72ed4e80 100644 --- a/packages/content-engine/demo/app/notes/[slug]/page.tsx +++ b/packages/content-engine/demo/app/notes/[slug]/page.tsx @@ -1,7 +1,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; -import { readContentFile } from "content-engine/content/readContentFile"; -import { getContentDirectory } from "content-engine/fs/getContentDirectory"; +import { readContentFile } from "@discontent/cms/content/readContentFile"; +import { getContentDirectory } from "@discontent/cms/fs/getContentDirectory"; import { noteConfig, NoteIndexKey, diff --git a/packages/content-engine/demo/app/notes/form.tsx b/packages/content-engine/demo/app/notes/form.tsx index b0060e20..8a542dc2 100644 --- a/packages/content-engine/demo/app/notes/form.tsx +++ b/packages/content-engine/demo/app/notes/form.tsx @@ -1,6 +1,6 @@ "use client"; -import { useCurrentTimezone } from "content-engine/hooks/useCurrentTimezone"; +import { useCurrentTimezone } from "@discontent/cms/hooks/useCurrentTimezone"; import type { Note } from "@/lib/notes"; interface NoteFormProps { diff --git a/packages/content-engine/demo/app/notes/new/page.tsx b/packages/content-engine/demo/app/notes/new/page.tsx index e698bca2..6af29f6d 100644 --- a/packages/content-engine/demo/app/notes/new/page.tsx +++ b/packages/content-engine/demo/app/notes/new/page.tsx @@ -1,7 +1,12 @@ import { redirect } from "next/navigation"; -import { createContent } from "content-engine/content/createContent"; -import { getContentDirectory } from "content-engine/fs/getContentDirectory"; -import { noteConfig, noteFormSchema, formDataToNote, generateSlug } from "@/lib/notes"; +import { createContent } from "@discontent/cms/content/createContent"; +import { getContentDirectory } from "@discontent/cms/fs/getContentDirectory"; +import { + noteConfig, + noteFormSchema, + formDataToNote, + generateSlug, +} from "@/lib/notes"; import { NoteForm } from "../form"; export const dynamic = "force-dynamic"; diff --git a/packages/content-engine/demo/app/page.tsx b/packages/content-engine/demo/app/page.tsx index 9ede6ac9..2df7be8a 100644 --- a/packages/content-engine/demo/app/page.tsx +++ b/packages/content-engine/demo/app/page.tsx @@ -1,6 +1,6 @@ import Link from "next/link"; -import { readContentIndex } from "content-engine/content/readContentIndex"; -import { getContentDirectory } from "content-engine/fs/getContentDirectory"; +import { readContentIndex } from "@discontent/cms/content/readContentIndex"; +import { getContentDirectory } from "@discontent/cms/fs/getContentDirectory"; import { noteConfig, type NoteIndexValue, diff --git a/packages/content-engine/demo/lib/bookmarks.ts b/packages/content-engine/demo/lib/bookmarks.ts index 2c5ba5ab..6e76fc9e 100644 --- a/packages/content-engine/demo/lib/bookmarks.ts +++ b/packages/content-engine/demo/lib/bookmarks.ts @@ -1,6 +1,6 @@ -import type { ContentTypeConfig } from "content-engine/content/types"; +import type { ContentTypeConfig } from "@discontent/cms/content/types"; import { z } from "zod"; -import dateEpochSchema from "content-engine/forms/schema/dateEpoch"; +import dateEpochSchema from "@discontent/cms/forms/schema/dateEpoch"; // Bookmark data schema - references a note by slug export interface Bookmark { @@ -55,8 +55,7 @@ export function formDataToBookmark( formData: BookmarkFormData, existingDate?: number, ): Bookmark { - const date = - typeof formData.date === "number" ? formData.date : null; + const date = typeof formData.date === "number" ? formData.date : null; return { note: formData.note, label: formData.label, diff --git a/packages/content-engine/demo/lib/notes.ts b/packages/content-engine/demo/lib/notes.ts index de9731f3..4394e356 100644 --- a/packages/content-engine/demo/lib/notes.ts +++ b/packages/content-engine/demo/lib/notes.ts @@ -1,6 +1,6 @@ -import type { ContentTypeConfig } from "content-engine/content/types"; +import type { ContentTypeConfig } from "@discontent/cms/content/types"; import { z } from "zod"; -import dateEpochSchema from "content-engine/forms/schema/dateEpoch"; +import dateEpochSchema from "@discontent/cms/forms/schema/dateEpoch"; import { bookmarkConfig } from "./bookmarks"; // Note data schema @@ -21,23 +21,27 @@ export interface NoteIndexValue { export type NoteIndexKey = [number, string]; // Content type configuration -export const noteConfig: ContentTypeConfig = { - contentType: "notes", - dataDirectory: "notes/data", - indexDirectory: "notes/index", - dataFilename: "note.json", - buildIndexValue: (data: Note): NoteIndexValue => ({ - title: data.title, - date: data.date, - }), - buildIndexKey: (slug: string, data: Note): NoteIndexKey => [data.date, slug], - referencedBy: [ - { - config: bookmarkConfig, - indexField: "note", - }, - ], -}; +export const noteConfig: ContentTypeConfig = + { + contentType: "notes", + dataDirectory: "notes/data", + indexDirectory: "notes/index", + dataFilename: "note.json", + buildIndexValue: (data: Note): NoteIndexValue => ({ + title: data.title, + date: data.date, + }), + buildIndexKey: (slug: string, data: Note): NoteIndexKey => [ + data.date, + slug, + ], + referencedBy: [ + { + config: bookmarkConfig, + indexField: "note", + }, + ], + }; // Zod schema for form validation export const noteFormSchema = z.object({ @@ -51,13 +55,21 @@ export const noteFormSchema = z.object({ export type NoteFormData = z.infer; // Helper to convert form data to Note -export function formDataToNote(formData: NoteFormData, existingDate?: number): Note { +export function formDataToNote( + formData: NoteFormData, + existingDate?: number, +): Note { const date = typeof formData.date === "number" ? formData.date : undefined; return { title: formData.title, content: formData.content, date: date ?? existingDate ?? Date.now(), - tags: formData.tags ? formData.tags.split(",").map((t) => t.trim()).filter(Boolean) : undefined, + tags: formData.tags + ? formData.tags + .split(",") + .map((t) => t.trim()) + .filter(Boolean) + : undefined, }; } diff --git a/packages/content-engine/demo/next.config.ts b/packages/content-engine/demo/next.config.ts index 1ec0f291..c4408e1a 100644 --- a/packages/content-engine/demo/next.config.ts +++ b/packages/content-engine/demo/next.config.ts @@ -1,7 +1,7 @@ import type { NextConfig } from "next"; const nextConfig: NextConfig = { - transpilePackages: ["content-engine"], + transpilePackages: ["@discontent/cms"], }; export default nextConfig; diff --git a/packages/content-engine/demo/package.json b/packages/content-engine/demo/package.json index fbb2b3a2..afb97a18 100644 --- a/packages/content-engine/demo/package.json +++ b/packages/content-engine/demo/package.json @@ -16,7 +16,7 @@ "generate-fixtures": "start-server-and-test dev:test http://localhost:3001 \"cypress run --config specPattern='cypress/fixtures/**/*.cy.{js,jsx,ts,tsx}'\"" }, "dependencies": { - "content-engine": "^1.0.0", + "@discontent/cms": "^1.0.0", "fs-extra": "^11.3.3", "lmdb": "^3.5.1", "next": "16.1.6", diff --git a/packages/content-engine/demo/tsconfig.json b/packages/content-engine/demo/tsconfig.json index d2de251f..1de51c3f 100644 --- a/packages/content-engine/demo/tsconfig.json +++ b/packages/content-engine/demo/tsconfig.json @@ -1,10 +1,6 @@ { "compilerOptions": { - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], + "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, "strict": true, @@ -22,9 +18,7 @@ } ], "paths": { - "@/*": [ - "./*" - ] + "@/*": ["./*"] }, "target": "ES2017" }, @@ -35,8 +29,5 @@ ".next/types/**/*.ts", ".next/dev/types/**/*.ts" ], - "exclude": [ - "node_modules", - "cypress" - ] + "exclude": ["node_modules", "cypress"] } diff --git a/packages/content-engine/package.json b/packages/content-engine/package.json index 0440fc63..de072f1f 100644 --- a/packages/content-engine/package.json +++ b/packages/content-engine/package.json @@ -1,5 +1,5 @@ { - "name": "content-engine", + "name": "@discontent/cms", "version": "1.0.0", "description": "", "main": "index.js", diff --git a/packages/menus-collection/components/Form/Items/index.tsx b/packages/menus-collection/components/Form/Items/index.tsx index cdbff163..f40d6ab2 100644 --- a/packages/menus-collection/components/Form/Items/index.tsx +++ b/packages/menus-collection/components/Form/Items/index.tsx @@ -1,12 +1,12 @@ import { MenuItem } from "../../../controller/types"; -import { Button } from "component-library/components/Button"; -import { FieldWrapper } from "component-library/components/Form"; +import { Button } from "@discontent/component-library/components/Button"; +import { FieldWrapper } from "@discontent/component-library/components/Form"; import { InputListControls, KeyListAction, useKeyList, -} from "component-library/components/Form/inputs/List"; -import { TextInput } from "component-library/components/Form/inputs/Text"; +} from "@discontent/component-library/components/Form/inputs/List"; +import { TextInput } from "@discontent/component-library/components/Form/inputs/Text"; import { ActionDispatch } from "react"; import { MenuFormErrors } from "../../../controller/formState"; diff --git a/packages/menus-collection/components/Form/fields.tsx b/packages/menus-collection/components/Form/fields.tsx index 6103028b..2f0cedc9 100644 --- a/packages/menus-collection/components/Form/fields.tsx +++ b/packages/menus-collection/components/Form/fields.tsx @@ -2,7 +2,7 @@ import { Menu } from "../../controller/types"; import { MenuFormState } from "../../controller/formState"; -import { StaticImageProps } from "next-static-image/src"; +import { StaticImageProps } from "@discontent/next-static-image/src"; import { ItemsListInput } from "./Items"; export default function MenuFields({ diff --git a/packages/menus-collection/components/View/index.tsx b/packages/menus-collection/components/View/index.tsx index 59dcf3fd..a4809204 100644 --- a/packages/menus-collection/components/View/index.tsx +++ b/packages/menus-collection/components/View/index.tsx @@ -1,6 +1,6 @@ import { Menu } from "../../controller/types"; -import Markdown from "component-library/components/Markdown"; +import Markdown from "@discontent/component-library/components/Markdown"; export const MenuView = ({ menu }: { menu?: Menu }) => { if (!menu) { diff --git a/packages/menus-collection/controller/filesystemDirectories.ts b/packages/menus-collection/controller/filesystemDirectories.ts index 8b9500c1..1ecb5f4e 100644 --- a/packages/menus-collection/controller/filesystemDirectories.ts +++ b/packages/menus-collection/controller/filesystemDirectories.ts @@ -1,6 +1,6 @@ import { resolve } from "path"; -import { contentDirectory } from "content-engine/fs/getContentDirectory"; +import { contentDirectory } from "@discontent/cms/fs/getContentDirectory"; export const menusBaseDirectory = resolve(contentDirectory, "menus"); diff --git a/packages/menus-collection/controller/parseFormData.ts b/packages/menus-collection/controller/parseFormData.ts index a6f90320..3a777aee 100644 --- a/packages/menus-collection/controller/parseFormData.ts +++ b/packages/menus-collection/controller/parseFormData.ts @@ -1,5 +1,5 @@ import { ZodSafeParseResult, z } from "zod"; -import parseFormData from "content-engine/forms/parseFormData"; +import parseFormData from "@discontent/cms/forms/parseFormData"; const baseMenuItemSchema = z.object({ name: z.string(), diff --git a/packages/menus-collection/package.json b/packages/menus-collection/package.json index 5ad0416f..ff9a8df0 100644 --- a/packages/menus-collection/package.json +++ b/packages/menus-collection/package.json @@ -1,5 +1,5 @@ { - "name": "menus-collection", + "name": "@discontent/menus-collection", "version": "1.0.0", "description": "", "main": "index.js", @@ -11,14 +11,14 @@ "license": "ISC", "dependencies": { "clsx": "^2.1.1", - "component-library": "^1.0.0", - "content-engine": "^1.0.0", + "@discontent/component-library": "^1.0.0", + "@discontent/cms": "^1.0.0", "format-quantity": "^3.0.0", "fraction.js": "^5.3.4", "fs-extra": "^11.3.3", "lodash": "^4.17.23", "next": "16.1.6", - "next-static-image": "^0.0.1", + "@discontent/next-static-image": "^0.0.1", "plaiceholder": "^3.0.0", "react": "19.2.4", "sharp": "0.34.5", diff --git a/packages/next-static-image/package.json b/packages/next-static-image/package.json index 5c6a27e7..44a6f142 100644 --- a/packages/next-static-image/package.json +++ b/packages/next-static-image/package.json @@ -1,5 +1,5 @@ { - "name": "next-static-image", + "name": "@discontent/next-static-image", "version": "0.0.1", "description": "", "main": "index.js", diff --git a/packages/pages-collection/components/Form/fields.tsx b/packages/pages-collection/components/Form/fields.tsx index 0241f2ca..d9b783fd 100644 --- a/packages/pages-collection/components/Form/fields.tsx +++ b/packages/pages-collection/components/Form/fields.tsx @@ -5,11 +5,11 @@ import slugify from "@sindresorhus/slugify"; import { Page } from "../../controller/types"; import { PageFormState } from "../../controller/formState"; import createDefaultSlug from "../../controller/createSlug"; -import { DateTimeInput } from "component-library/components/Form/inputs/DateTime"; -import { TextInput } from "component-library/components/Form/inputs/Text"; -import { MarkdownInput } from "component-library/components/Form/inputs/Markdown"; -import { StaticImageProps } from "next-static-image/src"; -import { useCurrentTimezone } from "content-engine/hooks/useCurrentTimezone"; +import { DateTimeInput } from "@discontent/component-library/components/Form/inputs/DateTime"; +import { TextInput } from "@discontent/component-library/components/Form/inputs/Text"; +import { MarkdownInput } from "@discontent/component-library/components/Form/inputs/Markdown"; +import { StaticImageProps } from "@discontent/next-static-image/src"; +import { useCurrentTimezone } from "@discontent/cms/hooks/useCurrentTimezone"; export default function PageFields({ page, diff --git a/packages/pages-collection/components/View/index.tsx b/packages/pages-collection/components/View/index.tsx index 0aae86c5..adb08ab2 100644 --- a/packages/pages-collection/components/View/index.tsx +++ b/packages/pages-collection/components/View/index.tsx @@ -1,6 +1,6 @@ import { Page } from "../../controller/types"; -import Markdown from "component-library/components/Markdown"; +import Markdown from "@discontent/component-library/components/Markdown"; export const PageView = ({ page }: { page?: Page }) => { if (!page) { diff --git a/packages/pages-collection/controller/data/readIndex.ts b/packages/pages-collection/controller/data/readIndex.ts index 17327842..bf69f8d5 100644 --- a/packages/pages-collection/controller/data/readIndex.ts +++ b/packages/pages-collection/controller/data/readIndex.ts @@ -1,6 +1,6 @@ import { pagesBaseDirectory } from "../filesystemDirectories"; import getPageBySlug from "./read"; -import { collectFiles } from "content-engine/fs/collectFiles"; +import { collectFiles } from "@discontent/cms/fs/collectFiles"; export interface MassagedPageEntry { date: number; diff --git a/packages/pages-collection/controller/filesystemDirectories.ts b/packages/pages-collection/controller/filesystemDirectories.ts index f6e79d7a..4b9b8380 100644 --- a/packages/pages-collection/controller/filesystemDirectories.ts +++ b/packages/pages-collection/controller/filesystemDirectories.ts @@ -1,6 +1,6 @@ import { resolve } from "path"; -import { contentDirectory } from "content-engine/fs/getContentDirectory"; +import { contentDirectory } from "@discontent/cms/fs/getContentDirectory"; export const pagesBaseDirectory = resolve(contentDirectory, "pages"); diff --git a/packages/pages-collection/controller/parseFormData.ts b/packages/pages-collection/controller/parseFormData.ts index 528926df..6108307f 100644 --- a/packages/pages-collection/controller/parseFormData.ts +++ b/packages/pages-collection/controller/parseFormData.ts @@ -1,6 +1,6 @@ import { ZodSafeParseResult, z } from "zod"; -import parseFormData from "content-engine/forms/parseFormData"; -import dateEpochSchema from "content-engine/forms/schema/dateEpoch"; +import parseFormData from "@discontent/cms/forms/parseFormData"; +import dateEpochSchema from "@discontent/cms/forms/schema/dateEpoch"; const PageFormSchema = z.object({ name: z.string().min(1), diff --git a/packages/pages-collection/package.json b/packages/pages-collection/package.json index 1fe5f598..ffbca399 100644 --- a/packages/pages-collection/package.json +++ b/packages/pages-collection/package.json @@ -1,5 +1,5 @@ { - "name": "pages-collection", + "name": "@discontent/pages-collection", "version": "1.0.0", "description": "", "main": "index.js", @@ -11,15 +11,15 @@ "license": "ISC", "dependencies": { "clsx": "^2.1.1", - "component-library": "^1.0.0", - "content-engine": "^1.0.0", + "@discontent/component-library": "^1.0.0", + "@discontent/cms": "^1.0.0", "format-quantity": "^3.0.0", "fraction.js": "^5.3.4", "fs-extra": "^11.3.3", "lodash": "^4.17.23", "markdown-to-jsx": "^9.6.1", "next": "16.1.6", - "next-static-image": "^0.0.1", + "@discontent/next-static-image": "^0.0.1", "plaiceholder": "^3.0.0", "react": "19.2.4", "sharp": "0.34.5", diff --git a/packages/projects-collection/components/Form/fields.tsx b/packages/projects-collection/components/Form/fields.tsx index aba2e518..b0095d48 100644 --- a/packages/projects-collection/components/Form/fields.tsx +++ b/packages/projects-collection/components/Form/fields.tsx @@ -5,11 +5,11 @@ import slugify from "@sindresorhus/slugify"; import { Project } from "../../controller/types"; import { ProjectFormState } from "../../controller/formState"; import createDefaultSlug from "../../controller/createSlug"; -import { DateTimeInput } from "component-library/components/Form/inputs/DateTime"; -import { TextInput } from "component-library/components/Form/inputs/Text"; -import { TextAreaInput } from "component-library/components/Form/inputs/TextArea"; -import { StaticImageProps } from "next-static-image/src"; -import { useCurrentTimezone } from "content-engine/hooks/useCurrentTimezone"; +import { DateTimeInput } from "@discontent/component-library/components/Form/inputs/DateTime"; +import { TextInput } from "@discontent/component-library/components/Form/inputs/Text"; +import { TextAreaInput } from "@discontent/component-library/components/Form/inputs/TextArea"; +import { StaticImageProps } from "@discontent/next-static-image/src"; +import { useCurrentTimezone } from "@discontent/cms/hooks/useCurrentTimezone"; export default function ProjectFields({ project, diff --git a/packages/projects-collection/components/View/index.tsx b/packages/projects-collection/components/View/index.tsx index 79b43787..e65a082a 100644 --- a/packages/projects-collection/components/View/index.tsx +++ b/packages/projects-collection/components/View/index.tsx @@ -1,6 +1,6 @@ import { Project } from "../../controller/types"; -import Markdown from "component-library/components/Markdown"; +import Markdown from "@discontent/component-library/components/Markdown"; export const ProjectView = ({ project }: { project?: Project }) => { if (!project) { diff --git a/packages/projects-collection/controller/data/readIndex.ts b/packages/projects-collection/controller/data/readIndex.ts index 9266585e..8612bb6d 100644 --- a/packages/projects-collection/controller/data/readIndex.ts +++ b/packages/projects-collection/controller/data/readIndex.ts @@ -1,6 +1,6 @@ import { projectsBaseDirectory } from "../filesystemDirectories"; import getProjectBySlug from "./read"; -import { collectFiles } from "content-engine/fs/collectFiles"; +import { collectFiles } from "@discontent/cms/fs/collectFiles"; export interface MassagedProjectEntry { date: number; diff --git a/packages/projects-collection/controller/filesystemDirectories.ts b/packages/projects-collection/controller/filesystemDirectories.ts index ec8146d3..417b72d8 100644 --- a/packages/projects-collection/controller/filesystemDirectories.ts +++ b/packages/projects-collection/controller/filesystemDirectories.ts @@ -1,6 +1,6 @@ import { resolve } from "path"; -import { contentDirectory } from "content-engine/fs/getContentDirectory"; +import { contentDirectory } from "@discontent/cms/fs/getContentDirectory"; export const projectsBaseDirectory = resolve(contentDirectory, "projects"); diff --git a/packages/projects-collection/controller/parseFormData.ts b/packages/projects-collection/controller/parseFormData.ts index eb2c956d..132cee0c 100644 --- a/packages/projects-collection/controller/parseFormData.ts +++ b/packages/projects-collection/controller/parseFormData.ts @@ -1,6 +1,6 @@ import { ZodSafeParseResult, z } from "zod"; -import parseFormData from "content-engine/forms/parseFormData"; -import dateEpochSchema from "content-engine/forms/schema/dateEpoch"; +import parseFormData from "@discontent/cms/forms/parseFormData"; +import dateEpochSchema from "@discontent/cms/forms/schema/dateEpoch"; const ProjectFormSchema = z.object({ name: z.string().min(1), diff --git a/packages/projects-collection/package.json b/packages/projects-collection/package.json index 2fbfd578..467276fd 100644 --- a/packages/projects-collection/package.json +++ b/packages/projects-collection/package.json @@ -1,5 +1,5 @@ { - "name": "projects-collection", + "name": "@discontent/projects-collection", "version": "1.0.0", "description": "", "main": "index.js", @@ -11,14 +11,14 @@ "license": "ISC", "dependencies": { "clsx": "^2.1.1", - "component-library": "^1.0.0", - "content-engine": "^1.0.0", + "@discontent/component-library": "^1.0.0", + "@discontent/cms": "^1.0.0", "format-quantity": "^3.0.0", "fraction.js": "^5.3.4", "fs-extra": "^11.3.3", "lodash": "^4.17.23", "next": "16.1.6", - "next-static-image": "^0.0.1", + "@discontent/next-static-image": "^0.0.1", "plaiceholder": "^3.0.0", "react": "19.2.4", "sharp": "0.34.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ed133bf3..9e155f6b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,12 +8,12 @@ importers: .: dependencies: - component-library: - specifier: ^1.0.0 - version: link:packages/component-library - content-engine: + '@discontent/cms': specifier: ^1.0.0 version: link:packages/content-engine + '@discontent/component-library': + specifier: ^1.0.0 + version: link:packages/component-library execa: specifier: ^9.6.1 version: 9.6.1 @@ -102,6 +102,12 @@ importers: packages/component-library: dependencies: + '@discontent/cms': + specifier: ^1.0.0 + version: link:../content-engine + '@discontent/next-static-image': + specifier: ^0.0.1 + version: link:../next-static-image '@radix-ui/react-dialog': specifier: ^1.1.15 version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -114,9 +120,6 @@ importers: clsx: specifier: ^2.1.1 version: 2.1.1 - content-engine: - specifier: ^1.0.0 - version: link:../content-engine github-markdown-css: specifier: ^5.8.1 version: 5.8.1 @@ -129,9 +132,6 @@ importers: next: specifier: 16.1.1 version: 16.1.1(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - next-static-image: - specifier: ^0.0.1 - version: link:../next-static-image react-markdown: specifier: ^10.1.0 version: 10.1.0(@types/react@19.2.10)(react@19.2.4) @@ -176,7 +176,7 @@ importers: packages/content-engine/demo: dependencies: - content-engine: + '@discontent/cms': specifier: ^1.0.0 version: link:.. fs-extra: @@ -228,15 +228,18 @@ importers: packages/menus-collection: dependencies: + '@discontent/cms': + specifier: ^1.0.0 + version: link:../content-engine + '@discontent/component-library': + specifier: ^1.0.0 + version: link:../component-library + '@discontent/next-static-image': + specifier: ^0.0.1 + version: link:../next-static-image clsx: specifier: ^2.1.1 version: 2.1.1 - component-library: - specifier: ^1.0.0 - version: link:../component-library - content-engine: - specifier: ^1.0.0 - version: link:../content-engine format-quantity: specifier: ^3.0.0 version: 3.0.0 @@ -252,9 +255,6 @@ importers: next: specifier: 16.1.6 version: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - next-static-image: - specifier: ^0.0.1 - version: link:../next-static-image plaiceholder: specifier: ^3.0.0 version: 3.0.0(sharp@0.34.5) @@ -305,15 +305,18 @@ importers: packages/pages-collection: dependencies: + '@discontent/cms': + specifier: ^1.0.0 + version: link:../content-engine + '@discontent/component-library': + specifier: ^1.0.0 + version: link:../component-library + '@discontent/next-static-image': + specifier: ^0.0.1 + version: link:../next-static-image clsx: specifier: ^2.1.1 version: 2.1.1 - component-library: - specifier: ^1.0.0 - version: link:../component-library - content-engine: - specifier: ^1.0.0 - version: link:../content-engine format-quantity: specifier: ^3.0.0 version: 3.0.0 @@ -332,9 +335,6 @@ importers: next: specifier: 16.1.6 version: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - next-static-image: - specifier: ^0.0.1 - version: link:../next-static-image plaiceholder: specifier: ^3.0.0 version: 3.0.0(sharp@0.34.5) @@ -357,15 +357,18 @@ importers: packages/projects-collection: dependencies: + '@discontent/cms': + specifier: ^1.0.0 + version: link:../content-engine + '@discontent/component-library': + specifier: ^1.0.0 + version: link:../component-library + '@discontent/next-static-image': + specifier: ^0.0.1 + version: link:../next-static-image clsx: specifier: ^2.1.1 version: 2.1.1 - component-library: - specifier: ^1.0.0 - version: link:../component-library - content-engine: - specifier: ^1.0.0 - version: link:../content-engine format-quantity: specifier: ^3.0.0 version: 3.0.0 @@ -381,9 +384,6 @@ importers: next: specifier: 16.1.6 version: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - next-static-image: - specifier: ^0.0.1 - version: link:../next-static-image plaiceholder: specifier: ^3.0.0 version: 3.0.0(sharp@0.34.5) @@ -406,30 +406,30 @@ importers: websites/portfolio/common: dependencies: - clsx: - specifier: ^2.1.1 - version: 2.1.1 - component-library: + '@discontent/cms': + specifier: ^1.0.0 + version: link:../../../packages/content-engine + '@discontent/component-library': specifier: ^1.0.0 version: link:../../../packages/component-library - content-engine: + '@discontent/menus-collection': specifier: ^1.0.0 - version: link:../../../packages/content-engine + version: link:../../../packages/menus-collection + '@discontent/next-static-image': + specifier: ^0.0.1 + version: link:../../../packages/next-static-image + clsx: + specifier: ^2.1.1 + version: 2.1.1 github-markdown-css: specifier: ^5.8.1 version: 5.8.1 markdown-to-jsx: specifier: ^9.6.1 version: 9.6.1(react@19.2.4) - menus-collection: - specifier: ^1.0.0 - version: link:../../../packages/menus-collection next: specifier: 16.1.6 version: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - next-static-image: - specifier: ^0.0.1 - version: link:../../../packages/next-static-image zod: specifier: ^4.3.6 version: 4.3.6 @@ -440,6 +440,24 @@ importers: websites/portfolio/editor: dependencies: + '@discontent/cms': + specifier: ^1.0.0 + version: link:../../../packages/content-engine + '@discontent/component-library': + specifier: ^1.0.0 + version: link:../../../packages/component-library + '@discontent/menus-collection': + specifier: ^1.0.0 + version: link:../../../packages/menus-collection + '@discontent/next-static-image': + specifier: ^0.0.1 + version: link:../../../packages/next-static-image + '@discontent/pages-collection': + specifier: ^1.0.0 + version: link:../../../packages/pages-collection + '@discontent/projects-collection': + specifier: ^1.0.0 + version: link:../../../packages/projects-collection '@sindresorhus/slugify': specifier: ^3.0.0 version: 3.0.0 @@ -452,12 +470,6 @@ importers: clsx: specifier: ^2.1.1 version: 2.1.1 - component-library: - specifier: ^1.0.0 - version: link:../../../packages/component-library - content-engine: - specifier: ^1.0.0 - version: link:../../../packages/content-engine date-fns: specifier: ^4.1.0 version: 4.1.0 @@ -488,27 +500,15 @@ importers: markdown-to-jsx: specifier: ^9.6.1 version: 9.6.1(react@19.2.4) - menus-collection: - specifier: ^1.0.0 - version: link:../../../packages/menus-collection next: specifier: 16.1.6 version: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) next-auth: specifier: 5.0.0-beta.30 version: 5.0.0-beta.30(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4) - next-static-image: - specifier: ^0.0.1 - version: link:../../../packages/next-static-image - pages-collection: - specifier: ^1.0.0 - version: link:../../../packages/pages-collection portfolio-website-common: specifier: ^1.0.0 version: link:../common - projects-collection: - specifier: ^1.0.0 - version: link:../../../packages/projects-collection react: specifier: 19.2.4 version: 19.2.4 @@ -591,6 +591,18 @@ importers: websites/portfolio/export: dependencies: + '@discontent/cms': + specifier: ^1.0.0 + version: link:../../../packages/content-engine + '@discontent/component-library': + specifier: ^1.0.0 + version: link:../../../packages/component-library + '@discontent/menus-collection': + specifier: ^1.0.0 + version: link:../../../packages/menus-collection + '@discontent/projects-collection': + specifier: ^1.0.0 + version: link:../../../packages/projects-collection '@sindresorhus/slugify': specifier: ^3.0.0 version: 3.0.0 @@ -600,12 +612,6 @@ importers: clsx: specifier: ^2.1.1 version: 2.1.1 - component-library: - specifier: ^1.0.0 - version: link:../../../packages/component-library - content-engine: - specifier: ^1.0.0 - version: link:../../../packages/content-engine date-fns: specifier: ^4.1.0 version: 4.1.0 @@ -633,9 +639,6 @@ importers: markdown-to-jsx: specifier: ^9.6.1 version: 9.6.1(react@19.2.4) - menus-collection: - specifier: ^1.0.0 - version: link:../../../packages/menus-collection netlify-cli: specifier: ^23.14.0 version: 23.14.0(@types/node@25.2.0)(picomatch@4.0.3)(rollup@4.57.1) @@ -645,9 +648,6 @@ importers: portfolio-website-common: specifier: ^1.0.0 version: link:../common - projects-collection: - specifier: ^1.0.0 - version: link:../../../packages/projects-collection react: specifier: 19.2.4 version: 19.2.4 @@ -715,18 +715,24 @@ importers: websites/recipe-website/common: dependencies: + '@discontent/cms': + specifier: ^1.0.0 + version: link:../../../packages/content-engine + '@discontent/component-library': + specifier: ^1.0.0 + version: link:../../../packages/component-library + '@discontent/menus-collection': + specifier: ^1.0.0 + version: link:../../../packages/menus-collection + '@discontent/next-static-image': + specifier: ^0.0.1 + version: link:../../../packages/next-static-image '@sindresorhus/slugify': specifier: ^3.0.0 version: 3.0.0 clsx: specifier: ^2.1.1 version: 2.1.1 - component-library: - specifier: ^1.0.0 - version: link:../../../packages/component-library - content-engine: - specifier: ^1.0.0 - version: link:../../../packages/content-engine flexsearch: specifier: ^0.8.212 version: 0.8.212 @@ -748,15 +754,9 @@ importers: markdown-to-jsx: specifier: ^9.6.1 version: 9.6.1(react@19.2.4) - menus-collection: - specifier: ^1.0.0 - version: link:../../../packages/menus-collection next: specifier: 16.1.6 version: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - next-static-image: - specifier: ^0.0.1 - version: link:../../../packages/next-static-image plaiceholder: specifier: ^3.0.0 version: 3.0.0(sharp@0.34.5) @@ -800,6 +800,21 @@ importers: websites/recipe-website/editor: dependencies: + '@discontent/cms': + specifier: ^1.0.0 + version: link:../../../packages/content-engine + '@discontent/component-library': + specifier: ^1.0.0 + version: link:../../../packages/component-library + '@discontent/menus-collection': + specifier: ^1.0.0 + version: link:../../../packages/menus-collection + '@discontent/next-static-image': + specifier: ^0.0.1 + version: link:../../../packages/next-static-image + '@discontent/pages-collection': + specifier: ^1.0.0 + version: link:../../../packages/pages-collection '@sindresorhus/slugify': specifier: ^3.0.0 version: 3.0.0 @@ -815,12 +830,6 @@ importers: clsx: specifier: ^2.1.1 version: 2.1.1 - component-library: - specifier: ^1.0.0 - version: link:../../../packages/component-library - content-engine: - specifier: ^1.0.0 - version: link:../../../packages/content-engine date-fns: specifier: ^4.1.0 version: 4.1.0 @@ -863,21 +872,12 @@ importers: mdast-util-to-markdown: specifier: ^2.1.2 version: 2.1.2 - menus-collection: - specifier: ^1.0.0 - version: link:../../../packages/menus-collection next: specifier: 16.1.6 version: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) next-auth: specifier: 5.0.0-beta.30 version: 5.0.0-beta.30(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4) - next-static-image: - specifier: ^0.0.1 - version: link:../../../packages/next-static-image - pages-collection: - specifier: ^1.0.0 - version: link:../../../packages/pages-collection parse5: specifier: ^8.0.0 version: 8.0.0 @@ -984,6 +984,15 @@ importers: websites/recipe-website/export: dependencies: + '@discontent/cms': + specifier: ^1.0.0 + version: link:../../../packages/content-engine + '@discontent/component-library': + specifier: ^1.0.0 + version: link:../../../packages/component-library + '@discontent/menus-collection': + specifier: ^1.0.0 + version: link:../../../packages/menus-collection '@sindresorhus/slugify': specifier: ^3.0.0 version: 3.0.0 @@ -993,12 +1002,6 @@ importers: clsx: specifier: ^2.1.1 version: 2.1.1 - component-library: - specifier: ^1.0.0 - version: link:../../../packages/component-library - content-engine: - specifier: ^1.0.0 - version: link:../../../packages/content-engine date-fns: specifier: ^4.1.0 version: 4.1.0 @@ -1020,9 +1023,6 @@ importers: markdown-to-jsx: specifier: ^9.6.1 version: 9.6.1(react@19.2.4) - menus-collection: - specifier: ^1.0.0 - version: link:../../../packages/menus-collection netlify-cli: specifier: ^23.14.0 version: 23.14.0(@types/node@25.2.0)(picomatch@4.0.3)(rollup@4.57.1) @@ -1099,18 +1099,18 @@ importers: websites/resume-builder: dependencies: + '@discontent/cms': + specifier: ^1.0.0 + version: link:../../packages/content-engine + '@discontent/component-library': + specifier: ^1.0.0 + version: link:../../packages/component-library '@tailwindcss/postcss': specifier: ^4.1.18 version: 4.1.18 cbor-x: specifier: ^1.6.0 version: 1.6.0 - component-library: - specifier: ^1.0.0 - version: link:../../packages/component-library - content-engine: - specifier: ^1.0.0 - version: link:../../packages/content-engine fs-extra: specifier: ^11.3.3 version: 11.3.3 diff --git a/websites/portfolio/common/components/Homepage/AboutSection/index.tsx b/websites/portfolio/common/components/Homepage/AboutSection/index.tsx index 9f3fde00..0ccca1ee 100644 --- a/websites/portfolio/common/components/Homepage/AboutSection/index.tsx +++ b/websites/portfolio/common/components/Homepage/AboutSection/index.tsx @@ -1,6 +1,6 @@ -import { getStaticImageProps } from "next-static-image/src"; +import { getStaticImageProps } from "@discontent/next-static-image/src"; import { HomepageContent } from "../../../homepage-controller/types"; -import Markdown from "component-library/components/Markdown"; +import Markdown from "@discontent/component-library/components/Markdown"; import { join } from "path"; import { transformedImageOutputDirectory, diff --git a/websites/portfolio/common/components/Homepage/ContactSection/index.tsx b/websites/portfolio/common/components/Homepage/ContactSection/index.tsx index 04584d72..6d9da436 100644 --- a/websites/portfolio/common/components/Homepage/ContactSection/index.tsx +++ b/websites/portfolio/common/components/Homepage/ContactSection/index.tsx @@ -1,7 +1,7 @@ import { join } from "path"; import Link from "next/link"; import { readFile } from "fs-extra"; -import { getContentDirectory } from "content-engine/fs/getContentDirectory"; +import { getContentDirectory } from "@discontent/cms/fs/getContentDirectory"; import { ContactLink, HomepageContent, diff --git a/websites/portfolio/common/components/Homepage/ProjectCard/index.tsx b/websites/portfolio/common/components/Homepage/ProjectCard/index.tsx index b675d254..ad864174 100644 --- a/websites/portfolio/common/components/Homepage/ProjectCard/index.tsx +++ b/websites/portfolio/common/components/Homepage/ProjectCard/index.tsx @@ -1,6 +1,6 @@ import Image from "next/image"; import Link from "next/link"; -import { getStaticImageProps } from "next-static-image/src"; +import { getStaticImageProps } from "@discontent/next-static-image/src"; import { join } from "path"; import { HomepageProjectItem } from "../../../homepage-controller/types"; import { diff --git a/websites/portfolio/common/homepage-controller/HomepageContactLinksInput/index.tsx b/websites/portfolio/common/homepage-controller/HomepageContactLinksInput/index.tsx index 0fcf23b3..918120db 100644 --- a/websites/portfolio/common/homepage-controller/HomepageContactLinksInput/index.tsx +++ b/websites/portfolio/common/homepage-controller/HomepageContactLinksInput/index.tsx @@ -3,9 +3,9 @@ import { ListInput, ListItemProps, -} from "component-library/components/Form/inputs/List"; -import { TextInput } from "component-library/components/Form/inputs/Text"; -import { SelectInput } from "component-library/components/Form/inputs/Select"; +} from "@discontent/component-library/components/Form/inputs/List"; +import { TextInput } from "@discontent/component-library/components/Form/inputs/Text"; +import { SelectInput } from "@discontent/component-library/components/Form/inputs/Select"; import { ContactLink } from "../types"; function ContactLinkInput({ name, defaultValue }: ListItemProps) { diff --git a/websites/portfolio/common/homepage-controller/HomepageProjectsInput/index.tsx b/websites/portfolio/common/homepage-controller/HomepageProjectsInput/index.tsx index 50716464..48d8b659 100644 --- a/websites/portfolio/common/homepage-controller/HomepageProjectsInput/index.tsx +++ b/websites/portfolio/common/homepage-controller/HomepageProjectsInput/index.tsx @@ -3,10 +3,10 @@ import { ListInput, ListItemProps, -} from "component-library/components/Form/inputs/List"; -import { TextInput } from "component-library/components/Form/inputs/Text"; -import { ImageInput } from "component-library/components/Form/inputs/Image"; -import { TextAreaInput } from "component-library/components/Form/inputs/TextArea"; +} from "@discontent/component-library/components/Form/inputs/List"; +import { TextInput } from "@discontent/component-library/components/Form/inputs/Text"; +import { ImageInput } from "@discontent/component-library/components/Form/inputs/Image"; +import { TextAreaInput } from "@discontent/component-library/components/Form/inputs/TextArea"; import { HomepageProjectItem, LinkItem } from "../types"; function LinkInput({ name, defaultValue }: ListItemProps) { diff --git a/websites/portfolio/common/homepage-controller/actions.ts b/websites/portfolio/common/homepage-controller/actions.ts index 62c72021..f41cc3cd 100644 --- a/websites/portfolio/common/homepage-controller/actions.ts +++ b/websites/portfolio/common/homepage-controller/actions.ts @@ -1,6 +1,6 @@ "use server"; -import parseFormData from "content-engine/forms/parseFormData"; +import parseFormData from "@discontent/cms/forms/parseFormData"; import { createWriteStream, ensureDir, outputJson } from "fs-extra"; import { redirect } from "next/navigation"; import { z } from "zod"; diff --git a/websites/portfolio/common/homepage-controller/paths.ts b/websites/portfolio/common/homepage-controller/paths.ts index 12c3f352..1d0a839b 100644 --- a/websites/portfolio/common/homepage-controller/paths.ts +++ b/websites/portfolio/common/homepage-controller/paths.ts @@ -1,4 +1,4 @@ -import { getContentDirectory } from "content-engine/fs/getContentDirectory"; +import { getContentDirectory } from "@discontent/cms/fs/getContentDirectory"; import { join } from "path"; export const homepageDirectory = join(getContentDirectory(), "homepage"); diff --git a/websites/portfolio/common/homepage-controller/types.ts b/websites/portfolio/common/homepage-controller/types.ts index 0b38772a..1c424372 100644 --- a/websites/portfolio/common/homepage-controller/types.ts +++ b/websites/portfolio/common/homepage-controller/types.ts @@ -1,4 +1,4 @@ -import { StaticImageProps } from "next-static-image/src"; +import { StaticImageProps } from "@discontent/next-static-image/src"; export interface LinkItem { label: string; diff --git a/websites/portfolio/common/package.json b/websites/portfolio/common/package.json index 78f4c39a..e9b1e253 100644 --- a/websites/portfolio/common/package.json +++ b/websites/portfolio/common/package.json @@ -11,13 +11,13 @@ "license": "ISC", "dependencies": { "clsx": "^2.1.1", - "component-library": "^1.0.0", - "content-engine": "^1.0.0", + "@discontent/component-library": "^1.0.0", + "@discontent/cms": "^1.0.0", "github-markdown-css": "^5.8.1", "markdown-to-jsx": "^9.6.1", - "menus-collection": "^1.0.0", + "@discontent/menus-collection": "^1.0.0", "next": "16.1.6", - "next-static-image": "^0.0.1", + "@discontent/next-static-image": "^0.0.1", "zod": "^4.3.6" }, "devDependencies": { diff --git a/websites/portfolio/editor/package.json b/websites/portfolio/editor/package.json index 35135240..1f065db7 100644 --- a/websites/portfolio/editor/package.json +++ b/websites/portfolio/editor/package.json @@ -20,8 +20,8 @@ "@tanstack/react-query": "^5.90.20", "bcrypt": "^6.0.0", "clsx": "^2.1.1", - "component-library": "^1.0.0", - "content-engine": "^1.0.0", + "@discontent/component-library": "^1.0.0", + "@discontent/cms": "^1.0.0", "date-fns": "^4.1.0", "entities": "^7.0.1", "execa": "^9.6.1", @@ -32,13 +32,13 @@ "lmdb": "^3.5.1", "lodash": "^4.17.23", "markdown-to-jsx": "^9.6.1", - "menus-collection": "^1.0.0", + "@discontent/menus-collection": "^1.0.0", "next": "16.1.6", "next-auth": "5.0.0-beta.30", - "next-static-image": "^0.0.1", - "pages-collection": "^1.0.0", + "@discontent/next-static-image": "^0.0.1", + "@discontent/pages-collection": "^1.0.0", "portfolio-website-common": "^1.0.0", - "projects-collection": "^1.0.0", + "@discontent/projects-collection": "^1.0.0", "react": "19.2.4", "react-dom": "19.2.4", "sharp": "0.34.5", diff --git a/websites/portfolio/editor/src/app/(editor)/(menus)/menus/edit/[...slug]/form.tsx b/websites/portfolio/editor/src/app/(editor)/(menus)/menus/edit/[...slug]/form.tsx index ea141a40..33b5f76a 100644 --- a/websites/portfolio/editor/src/app/(editor)/(menus)/menus/edit/[...slug]/form.tsx +++ b/websites/portfolio/editor/src/app/(editor)/(menus)/menus/edit/[...slug]/form.tsx @@ -1,11 +1,11 @@ "use client"; -import UpdateMenuFields from "menus-collection/components/Form/Update"; +import UpdateMenuFields from "@discontent/menus-collection/components/Form/Update"; import { useActionState } from "react"; -import { Button } from "component-library/components/Button"; -import { Menu } from "menus-collection/controller/types"; -import { MenuFormState } from "menus-collection/controller/formState"; -import updateMenu from "menus-collection/controller/actions/update"; +import { Button } from "@discontent/component-library/components/Button"; +import { Menu } from "@discontent/menus-collection/controller/types"; +import { MenuFormState } from "@discontent/menus-collection/controller/formState"; +import updateMenu from "@discontent/menus-collection/controller/actions/update"; import Link from "next/link"; export default function EditMenuForm({ diff --git a/websites/portfolio/editor/src/app/(editor)/(menus)/menus/edit/[...slug]/page.tsx b/websites/portfolio/editor/src/app/(editor)/(menus)/menus/edit/[...slug]/page.tsx index d6dd8258..5d3ecdee 100644 --- a/websites/portfolio/editor/src/app/(editor)/(menus)/menus/edit/[...slug]/page.tsx +++ b/websites/portfolio/editor/src/app/(editor)/(menus)/menus/edit/[...slug]/page.tsx @@ -1,7 +1,7 @@ -import getMenuBySlug from "menus-collection/controller/data/read"; +import getMenuBySlug from "@discontent/menus-collection/controller/data/read"; import EditForm from "./form"; -import deleteMenu from "menus-collection/controller/actions/delete"; -import { Button } from "component-library/components/Button"; +import deleteMenu from "@discontent/menus-collection/controller/actions/delete"; +import { Button } from "@discontent/component-library/components/Button"; import { auth, signIn } from "@/auth"; async function maybeGetMenu(slug: string) { diff --git a/websites/portfolio/editor/src/app/(editor)/(pages)/[...slug]/page.tsx b/websites/portfolio/editor/src/app/(editor)/(pages)/[...slug]/page.tsx index 3fcdd7e0..d4541997 100644 --- a/websites/portfolio/editor/src/app/(editor)/(pages)/[...slug]/page.tsx +++ b/websites/portfolio/editor/src/app/(editor)/(pages)/[...slug]/page.tsx @@ -1,8 +1,8 @@ import Link from "next/link"; import { notFound } from "next/navigation"; -import getPageBySlug from "pages-collection/controller/data/read"; -import { PageView } from "pages-collection/components/View"; -import deletePage from "pages-collection/controller/actions/delete"; +import getPageBySlug from "@discontent/pages-collection/controller/data/read"; +import { PageView } from "@discontent/pages-collection/components/View"; +import deletePage from "@discontent/pages-collection/controller/actions/delete"; export async function generateMetadata({ params, diff --git a/websites/portfolio/editor/src/app/(editor)/(pages)/pages/edit/[...slug]/form.tsx b/websites/portfolio/editor/src/app/(editor)/(pages)/pages/edit/[...slug]/form.tsx index 20a80980..e8221a29 100644 --- a/websites/portfolio/editor/src/app/(editor)/(pages)/pages/edit/[...slug]/form.tsx +++ b/websites/portfolio/editor/src/app/(editor)/(pages)/pages/edit/[...slug]/form.tsx @@ -1,11 +1,11 @@ "use client"; -import UpdatePageFields from "pages-collection/components/Form/Update"; +import UpdatePageFields from "@discontent/pages-collection/components/Form/Update"; import { useActionState } from "react"; -import { Button } from "component-library/components/Button"; -import { Page } from "pages-collection/controller/types"; -import { PageFormState } from "pages-collection/controller/formState"; -import updatePage from "pages-collection/controller/actions/update"; +import { Button } from "@discontent/component-library/components/Button"; +import { Page } from "@discontent/pages-collection/controller/types"; +import { PageFormState } from "@discontent/pages-collection/controller/formState"; +import updatePage from "@discontent/pages-collection/controller/actions/update"; import Link from "next/link"; export default function EditPageForm({ diff --git a/websites/portfolio/editor/src/app/(editor)/(pages)/pages/edit/[...slug]/page.tsx b/websites/portfolio/editor/src/app/(editor)/(pages)/pages/edit/[...slug]/page.tsx index 3f2580f3..ee35716b 100644 --- a/websites/portfolio/editor/src/app/(editor)/(pages)/pages/edit/[...slug]/page.tsx +++ b/websites/portfolio/editor/src/app/(editor)/(pages)/pages/edit/[...slug]/page.tsx @@ -1,4 +1,4 @@ -import getPageBySlug from "pages-collection/controller/data/read"; +import getPageBySlug from "@discontent/pages-collection/controller/data/read"; import EditForm from "./form"; import { notFound } from "next/navigation"; import { auth, signIn } from "@/auth"; diff --git a/websites/portfolio/editor/src/app/(editor)/(pages)/pages/new/form.tsx b/websites/portfolio/editor/src/app/(editor)/(pages)/pages/new/form.tsx index 39322825..64bc5362 100644 --- a/websites/portfolio/editor/src/app/(editor)/(pages)/pages/new/form.tsx +++ b/websites/portfolio/editor/src/app/(editor)/(pages)/pages/new/form.tsx @@ -1,10 +1,10 @@ "use client"; -import CreatePageFields from "pages-collection/components/Form/Create"; +import CreatePageFields from "@discontent/pages-collection/components/Form/Create"; import { useActionState } from "react"; -import { Button } from "component-library/components/Button"; -import { PageFormState } from "pages-collection/controller/formState"; -import createPage from "pages-collection/controller/actions/create"; +import { Button } from "@discontent/component-library/components/Button"; +import { PageFormState } from "@discontent/pages-collection/controller/formState"; +import createPage from "@discontent/pages-collection/controller/actions/create"; import Link from "next/link"; export default function NewPageForm() { diff --git a/websites/portfolio/editor/src/app/(editor)/(pages)/pages/page.tsx b/websites/portfolio/editor/src/app/(editor)/(pages)/pages/page.tsx index 3dcf2c16..ae25dfcd 100644 --- a/websites/portfolio/editor/src/app/(editor)/(pages)/pages/page.tsx +++ b/websites/portfolio/editor/src/app/(editor)/(pages)/pages/page.tsx @@ -1,6 +1,6 @@ import getPages, { MassagedPageEntry, -} from "pages-collection/controller/data/readIndex"; +} from "@discontent/pages-collection/controller/data/readIndex"; import Link from "next/link"; import { auth, signIn } from "@/auth"; diff --git a/websites/portfolio/editor/src/app/(editor)/(projects)/projects/edit/[...slug]/form.tsx b/websites/portfolio/editor/src/app/(editor)/(projects)/projects/edit/[...slug]/form.tsx index 9c54b600..fc2c4dba 100644 --- a/websites/portfolio/editor/src/app/(editor)/(projects)/projects/edit/[...slug]/form.tsx +++ b/websites/portfolio/editor/src/app/(editor)/(projects)/projects/edit/[...slug]/form.tsx @@ -1,11 +1,11 @@ "use client"; -import UpdateProjectFields from "projects-collection/components/Form/Update"; +import UpdateProjectFields from "@discontent/projects-collection/components/Form/Update"; import { useActionState } from "react"; -import { Button } from "component-library/components/Button"; -import { Project } from "projects-collection/controller/types"; -import { ProjectFormState } from "projects-collection/controller/formState"; -import updateProject from "projects-collection/controller/actions/update"; +import { Button } from "@discontent/component-library/components/Button"; +import { Project } from "@discontent/projects-collection/controller/types"; +import { ProjectFormState } from "@discontent/projects-collection/controller/formState"; +import updateProject from "@discontent/projects-collection/controller/actions/update"; import Link from "next/link"; export default function EditProjectForm({ diff --git a/websites/portfolio/editor/src/app/(editor)/(projects)/projects/edit/[...slug]/page.tsx b/websites/portfolio/editor/src/app/(editor)/(projects)/projects/edit/[...slug]/page.tsx index cd11eb2b..72dd3ac3 100644 --- a/websites/portfolio/editor/src/app/(editor)/(projects)/projects/edit/[...slug]/page.tsx +++ b/websites/portfolio/editor/src/app/(editor)/(projects)/projects/edit/[...slug]/page.tsx @@ -1,4 +1,4 @@ -import getProjectBySlug from "projects-collection/controller/data/read"; +import getProjectBySlug from "@discontent/projects-collection/controller/data/read"; import EditForm from "./form"; import { notFound } from "next/navigation"; import { auth, signIn } from "@/auth"; diff --git a/websites/portfolio/editor/src/app/(editor)/(projects)/projects/new/form.tsx b/websites/portfolio/editor/src/app/(editor)/(projects)/projects/new/form.tsx index 4d3876d1..c91f8b33 100644 --- a/websites/portfolio/editor/src/app/(editor)/(projects)/projects/new/form.tsx +++ b/websites/portfolio/editor/src/app/(editor)/(projects)/projects/new/form.tsx @@ -1,10 +1,10 @@ "use client"; -import CreateProjectFields from "projects-collection/components/Form/Create"; +import CreateProjectFields from "@discontent/projects-collection/components/Form/Create"; import { useActionState } from "react"; -import { Button } from "component-library/components/Button"; -import { ProjectFormState } from "projects-collection/controller/formState"; -import createProject from "projects-collection/controller/actions/create"; +import { Button } from "@discontent/component-library/components/Button"; +import { ProjectFormState } from "@discontent/projects-collection/controller/formState"; +import createProject from "@discontent/projects-collection/controller/actions/create"; import Link from "next/link"; export default function NewProjectForm() { diff --git a/websites/portfolio/editor/src/app/(editor)/(projects)/projects/page.tsx b/websites/portfolio/editor/src/app/(editor)/(projects)/projects/page.tsx index a564419c..00bfc309 100644 --- a/websites/portfolio/editor/src/app/(editor)/(projects)/projects/page.tsx +++ b/websites/portfolio/editor/src/app/(editor)/(projects)/projects/page.tsx @@ -1,6 +1,6 @@ import getProjects, { MassagedProjectEntry, -} from "projects-collection/controller/data/readIndex"; +} from "@discontent/projects-collection/controller/data/readIndex"; import Link from "next/link"; import { auth, signIn } from "@/auth"; diff --git a/websites/portfolio/editor/src/app/(editor)/build/route.ts b/websites/portfolio/editor/src/app/(editor)/build/route.ts index 073dff9c..3b8c7cbb 100644 --- a/websites/portfolio/editor/src/app/(editor)/build/route.ts +++ b/websites/portfolio/editor/src/app/(editor)/build/route.ts @@ -1,6 +1,6 @@ import { NextRequest, NextResponse } from "next/server"; import { execa } from "execa"; -import { getContentDirectory } from "content-engine/fs/getContentDirectory"; +import { getContentDirectory } from "@discontent/cms/fs/getContentDirectory"; import { unstable_noStore } from "next/cache"; import { auth, signIn } from "@/auth"; import { resolve } from "path"; diff --git a/websites/portfolio/editor/src/app/(editor)/deploy/route.ts b/websites/portfolio/editor/src/app/(editor)/deploy/route.ts index 3e95ec86..a1310efe 100644 --- a/websites/portfolio/editor/src/app/(editor)/deploy/route.ts +++ b/websites/portfolio/editor/src/app/(editor)/deploy/route.ts @@ -1,7 +1,7 @@ import { NextRequest, NextResponse } from "next/server"; import { execa } from "execa"; import { ReadStream } from "fs"; -import { getContentDirectory } from "content-engine/fs/getContentDirectory"; +import { getContentDirectory } from "@discontent/cms/fs/getContentDirectory"; import { unstable_noStore } from "next/cache"; import { resolve } from "path"; import { auth, signIn } from "@/auth"; diff --git a/websites/portfolio/editor/src/app/(editor)/export/exporter.tsx b/websites/portfolio/editor/src/app/(editor)/export/exporter.tsx index 60c6b02d..d9cbcdd2 100644 --- a/websites/portfolio/editor/src/app/(editor)/export/exporter.tsx +++ b/websites/portfolio/editor/src/app/(editor)/export/exporter.tsx @@ -1,6 +1,6 @@ "use client"; -import { Button } from "component-library/components/Button"; +import { Button } from "@discontent/component-library/components/Button"; import { ReactNode, useCallback, useEffect, useState } from "react"; const decoder = new TextDecoder(); diff --git a/websites/portfolio/editor/src/app/(editor)/homepage/HomepageInput.tsx b/websites/portfolio/editor/src/app/(editor)/homepage/HomepageInput.tsx index 83d59238..1d6e0def 100644 --- a/websites/portfolio/editor/src/app/(editor)/homepage/HomepageInput.tsx +++ b/websites/portfolio/editor/src/app/(editor)/homepage/HomepageInput.tsx @@ -1,7 +1,7 @@ "use client"; -import { MarkdownInputProps } from "component-library/components/Form/inputs/Markdown/common"; -import { MarkdownInput } from "component-library/components/Form/inputs/Markdown"; +import { MarkdownInputProps } from "@discontent/component-library/components/Form/inputs/Markdown/common"; +import { MarkdownInput } from "@discontent/component-library/components/Form/inputs/Markdown"; export default function HomepageMarkdownInput({ name, diff --git a/websites/portfolio/editor/src/app/(editor)/homepage/UploadsList/index.tsx b/websites/portfolio/editor/src/app/(editor)/homepage/UploadsList/index.tsx index 249497d5..294c6d33 100644 --- a/websites/portfolio/editor/src/app/(editor)/homepage/UploadsList/index.tsx +++ b/websites/portfolio/editor/src/app/(editor)/homepage/UploadsList/index.tsx @@ -1,13 +1,13 @@ "use client"; -import { Button } from "component-library/components/Button"; -import { FileInput } from "component-library/components/Form/inputs/File"; -import { ImageInput } from "component-library/components/Form/inputs/Image"; +import { Button } from "@discontent/component-library/components/Button"; +import { FileInput } from "@discontent/component-library/components/Form/inputs/File"; +import { ImageInput } from "@discontent/component-library/components/Form/inputs/Image"; import { ListItemProps, useKeyList, -} from "component-library/components/Form/inputs/List"; -import { TextInput } from "component-library/components/Form/inputs/Text"; +} from "@discontent/component-library/components/Form/inputs/List"; +import { TextInput } from "@discontent/component-library/components/Form/inputs/Text"; export interface HomepageUploadInputItem { file?: File; diff --git a/websites/portfolio/editor/src/app/(editor)/homepage/page.tsx b/websites/portfolio/editor/src/app/(editor)/homepage/page.tsx index da42b118..f02f6df1 100644 --- a/websites/portfolio/editor/src/app/(editor)/homepage/page.tsx +++ b/websites/portfolio/editor/src/app/(editor)/homepage/page.tsx @@ -1,10 +1,10 @@ -import { TextInput } from "component-library/components/Form/inputs/Text"; +import { TextInput } from "@discontent/component-library/components/Form/inputs/Text"; import HomepageProjectsInput from "portfolio-website-common/homepage-controller/HomepageProjectsInput"; import { getHomepageContent } from "portfolio-website-common/homepage-controller/data"; import { writeHomepageContent } from "portfolio-website-common/homepage-controller/actions"; -import { Button } from "component-library/components/Button"; +import { Button } from "@discontent/component-library/components/Button"; import HomepageContactLinksInput from "portfolio-website-common/homepage-controller/HomepageContactLinksInput"; -import { getStaticImageProps } from "next-static-image/src"; +import { getStaticImageProps } from "@discontent/next-static-image/src"; import { resolve } from "path"; import { transformedImageOutputDirectory, diff --git a/websites/portfolio/editor/src/app/(portfolio)/project/[...slug]/page.tsx b/websites/portfolio/editor/src/app/(portfolio)/project/[...slug]/page.tsx index b1e42bca..3de3ace7 100644 --- a/websites/portfolio/editor/src/app/(portfolio)/project/[...slug]/page.tsx +++ b/websites/portfolio/editor/src/app/(portfolio)/project/[...slug]/page.tsx @@ -1,8 +1,8 @@ import Link from "next/link"; import { notFound } from "next/navigation"; -import getProjectBySlug from "projects-collection/controller/data/read"; -import { ProjectView } from "projects-collection/components/View"; -import deleteProject from "projects-collection/controller/actions/delete"; +import getProjectBySlug from "@discontent/projects-collection/controller/data/read"; +import { ProjectView } from "@discontent/projects-collection/components/View"; +import deleteProject from "@discontent/projects-collection/controller/actions/delete"; export async function generateMetadata({ params, diff --git a/websites/portfolio/editor/src/app/image/[...filePath]/route.ts b/websites/portfolio/editor/src/app/image/[...filePath]/route.ts index 3d8dc4ab..e50d8d2f 100644 --- a/websites/portfolio/editor/src/app/image/[...filePath]/route.ts +++ b/websites/portfolio/editor/src/app/image/[...filePath]/route.ts @@ -1,4 +1,4 @@ -import { getContentDirectory } from "content-engine/fs/getContentDirectory"; +import { getContentDirectory } from "@discontent/cms/fs/getContentDirectory"; import { ReadStream } from "fs"; import { open } from "fs/promises"; import { notFound } from "next/navigation"; diff --git a/websites/portfolio/editor/src/auth.ts b/websites/portfolio/editor/src/auth.ts index c01bf422..85760228 100644 --- a/websites/portfolio/editor/src/auth.ts +++ b/websites/portfolio/editor/src/auth.ts @@ -5,7 +5,7 @@ import { z } from "zod"; import { readJson } from "fs-extra"; import { resolve } from "path"; import bcrypt from "bcrypt"; -import { getContentDirectory } from "content-engine/fs/getContentDirectory"; +import { getContentDirectory } from "@discontent/cms/fs/getContentDirectory"; interface User { id: string; diff --git a/websites/portfolio/editor/src/components/SiteHeader/index.tsx b/websites/portfolio/editor/src/components/SiteHeader/index.tsx index 1bbf62d9..e1dbc3f2 100644 --- a/websites/portfolio/editor/src/components/SiteHeader/index.tsx +++ b/websites/portfolio/editor/src/components/SiteHeader/index.tsx @@ -1,5 +1,5 @@ import Link from "next/link"; -import getMenuBySlug from "menus-collection/controller/data/read"; +import getMenuBySlug from "@discontent/menus-collection/controller/data/read"; export async function SiteHeader() { const menu = await getMenuBySlug("header"); diff --git a/websites/portfolio/export/package.json b/websites/portfolio/export/package.json index da7716d7..d61fb02c 100644 --- a/websites/portfolio/export/package.json +++ b/websites/portfolio/export/package.json @@ -19,8 +19,8 @@ "@sindresorhus/slugify": "^3.0.0", "@tanstack/react-query": "^5.90.20", "clsx": "^2.1.1", - "component-library": "^1.0.0", - "content-engine": "^1.0.0", + "@discontent/component-library": "^1.0.0", + "@discontent/cms": "^1.0.0", "date-fns": "^4.1.0", "flexsearch": "^0.8.212", "format-quantity": "^3.0.0", @@ -30,11 +30,11 @@ "lmdb": "^3.5.1", "lodash": "^4.17.23", "markdown-to-jsx": "^9.6.1", - "menus-collection": "^1.0.0", + "@discontent/menus-collection": "^1.0.0", "netlify-cli": "^23.14.0", "next": "16.1.6", "portfolio-website-common": "^1.0.0", - "projects-collection": "^1.0.0", + "@discontent/projects-collection": "^1.0.0", "react": "19.2.4", "react-dom": "19.2.4", "sharp": "0.34.5", diff --git a/websites/recipe-website/common/components/AppLayout/AppProviders.tsx b/websites/recipe-website/common/components/AppLayout/AppProviders.tsx index 6566f664..8913460c 100644 --- a/websites/recipe-website/common/components/AppLayout/AppProviders.tsx +++ b/websites/recipe-website/common/components/AppLayout/AppProviders.tsx @@ -9,9 +9,7 @@ export function AppProviders({ children }: { children: ReactNode }) { return ( - - {children} - + {children} ); diff --git a/websites/recipe-website/common/components/AppLayout/index.tsx b/websites/recipe-website/common/components/AppLayout/index.tsx index b2a91472..07310b0c 100644 --- a/websites/recipe-website/common/components/AppLayout/index.tsx +++ b/websites/recipe-website/common/components/AppLayout/index.tsx @@ -1,6 +1,6 @@ import Link from "next/link"; -import getMenuBySlug from "menus-collection/controller/data/read"; -import { MenuItem } from "menus-collection/controller/types"; +import getMenuBySlug from "@discontent/menus-collection/controller/data/read"; +import { MenuItem } from "@discontent/menus-collection/controller/types"; import { ReactNode } from "react"; import { AppProviders } from "./AppProviders"; diff --git a/websites/recipe-website/common/components/BookmarkButton/index.tsx b/websites/recipe-website/common/components/BookmarkButton/index.tsx index bb86fe81..79539ff1 100644 --- a/websites/recipe-website/common/components/BookmarkButton/index.tsx +++ b/websites/recipe-website/common/components/BookmarkButton/index.tsx @@ -1,6 +1,6 @@ "use client"; -import { Button } from "component-library/components/ui/button"; +import { Button } from "@discontent/component-library/components/ui/button"; import { useBookmarks } from "../../context/BookmarksContext"; import { MassagedRecipeEntry } from "../../controller/data/read"; import clsx from "clsx"; diff --git a/websites/recipe-website/common/components/ClientList/index.tsx b/websites/recipe-website/common/components/ClientList/index.tsx index fbcac04c..a826240f 100644 --- a/websites/recipe-website/common/components/ClientList/index.tsx +++ b/websites/recipe-website/common/components/ClientList/index.tsx @@ -1,5 +1,5 @@ import { MassagedRecipeEntry } from "../../controller/data/read"; -import { PureStaticImage } from "next-static-image/src/Pure"; +import { PureStaticImage } from "@discontent/next-static-image/src/Pure"; import { RecipeCard, RecipeCardLink, diff --git a/websites/recipe-website/common/components/FeaturedRecipeDetailPage/index.tsx b/websites/recipe-website/common/components/FeaturedRecipeDetailPage/index.tsx index 485c9260..dbf01265 100644 --- a/websites/recipe-website/common/components/FeaturedRecipeDetailPage/index.tsx +++ b/websites/recipe-website/common/components/FeaturedRecipeDetailPage/index.tsx @@ -1,7 +1,7 @@ import Link from "next/link"; import { RecipeView } from "recipe-website-common/components/View"; -import { buttonVariants } from "component-library/components/ui/button"; -import Markdown from "component-library/components/Markdown"; +import { buttonVariants } from "@discontent/component-library/components/ui/button"; +import Markdown from "@discontent/component-library/components/Markdown"; import { Recipe } from "recipe-website-common/controller/types"; import { ReactNode } from "react"; import { diff --git a/websites/recipe-website/common/components/FeaturedRecipeIndexPage/FirstFeaturedRecipeIndexPage.tsx b/websites/recipe-website/common/components/FeaturedRecipeIndexPage/FirstFeaturedRecipeIndexPage.tsx index ec27e8a6..54b0dd56 100644 --- a/websites/recipe-website/common/components/FeaturedRecipeIndexPage/FirstFeaturedRecipeIndexPage.tsx +++ b/websites/recipe-website/common/components/FeaturedRecipeIndexPage/FirstFeaturedRecipeIndexPage.tsx @@ -8,5 +8,11 @@ export default function FirstFeaturedRecipeIndexPage({ featuredRecipes: MassagedFeaturedRecipeEntry[]; more: boolean; }) { - return ; + return ( + + ); } diff --git a/websites/recipe-website/common/components/FeaturedRecipeIndexPage/index.tsx b/websites/recipe-website/common/components/FeaturedRecipeIndexPage/index.tsx index a523a120..29c97f9e 100644 --- a/websites/recipe-website/common/components/FeaturedRecipeIndexPage/index.tsx +++ b/websites/recipe-website/common/components/FeaturedRecipeIndexPage/index.tsx @@ -11,6 +11,10 @@ export default function FeaturedRecipeIndexPage({ more: boolean; }) { return ( - + ); } diff --git a/websites/recipe-website/common/components/FeaturedRecipeIndexPage/shared.tsx b/websites/recipe-website/common/components/FeaturedRecipeIndexPage/shared.tsx index c0010fa7..0bfdc18f 100644 --- a/websites/recipe-website/common/components/FeaturedRecipeIndexPage/shared.tsx +++ b/websites/recipe-website/common/components/FeaturedRecipeIndexPage/shared.tsx @@ -16,7 +16,9 @@ export function Pagination({ }) { const isFirstPage = pageNumber === 1; const previousHref = - pageNumber === 2 ? "/featured-recipes" : `/featured-recipes/${pageNumber - 1}`; + pageNumber === 2 + ? "/featured-recipes" + : `/featured-recipes/${pageNumber - 1}`; return (
diff --git a/websites/recipe-website/common/components/Form/FeaturedRecipe/index.tsx b/websites/recipe-website/common/components/Form/FeaturedRecipe/index.tsx index 3305c7d0..182547bb 100644 --- a/websites/recipe-website/common/components/Form/FeaturedRecipe/index.tsx +++ b/websites/recipe-website/common/components/Form/FeaturedRecipe/index.tsx @@ -2,14 +2,14 @@ import { useMemo, useState } from "react"; import { FeaturedRecipeFormState } from "recipe-website-common/controller/featuredRecipeFormState"; -import { DateTimeInput } from "component-library/components/Form/inputs/DateTime"; -import { TextInput } from "component-library/components/Form/inputs/Text"; -import { MarkdownInput } from "component-library/components/Form/inputs/Markdown"; +import { DateTimeInput } from "@discontent/component-library/components/Form/inputs/DateTime"; +import { TextInput } from "@discontent/component-library/components/Form/inputs/Text"; +import { MarkdownInput } from "@discontent/component-library/components/Form/inputs/Markdown"; import { RecipeSelectInput } from "recipe-website-common/components/Form/inputs/RecipeSelect"; import { FeaturedRecipe } from "recipe-website-common/controller/types"; import slugify from "@sindresorhus/slugify"; import createDefaultFeaturedRecipeSlug from "recipe-website-common/controller/createFeaturedRecipeSlug"; -import { useCurrentTimezone } from "content-engine/hooks/useCurrentTimezone"; +import { useCurrentTimezone } from "@discontent/cms/hooks/useCurrentTimezone"; export default function FeaturedRecipeFields({ featuredRecipe, diff --git a/websites/recipe-website/common/components/Form/Image/index.tsx b/websites/recipe-website/common/components/Form/Image/index.tsx index 7f38755c..b690bfa5 100644 --- a/websites/recipe-website/common/components/Form/Image/index.tsx +++ b/websites/recipe-website/common/components/Form/Image/index.tsx @@ -2,9 +2,9 @@ import { useEffect, useRef, useState } from "react"; import Image from "next/image"; -import { FileInput } from "component-library/components/Form/inputs/File"; -import { CheckboxInput } from "component-library/components/Form/inputs/Checkbox"; -import { StaticImageProps } from "next-static-image/src"; +import { FileInput } from "@discontent/component-library/components/Form/inputs/File"; +import { CheckboxInput } from "@discontent/component-library/components/Form/inputs/Checkbox"; +import { StaticImageProps } from "@discontent/next-static-image/src"; export function ImageInput({ defaultImage, diff --git a/websites/recipe-website/common/components/Form/Ingredients/index.tsx b/websites/recipe-website/common/components/Form/Ingredients/index.tsx index dedd84c3..690f7369 100644 --- a/websites/recipe-website/common/components/Form/Ingredients/index.tsx +++ b/websites/recipe-website/common/components/Form/Ingredients/index.tsx @@ -2,20 +2,20 @@ import clsx from "clsx"; import { RecipeFormErrors } from "../../../controller/formState"; import { Ingredient } from "../../../controller/types"; import { createIngredients } from "../../../util/parseIngredients"; -import { Button } from "component-library/components/Button"; +import { Button } from "@discontent/component-library/components/Button"; import { FieldWrapper, baseInputStyle, -} from "component-library/components/Form"; +} from "@discontent/component-library/components/Form"; import { InputListControls, KeyListAction, useKeyList, -} from "component-library/components/Form/inputs/List"; +} from "@discontent/component-library/components/Form/inputs/List"; import { ActionDispatch, useEffect, useState } from "react"; -import { MarkdownInputProps } from "component-library/components/Form/inputs/Markdown/common"; +import { MarkdownInputProps } from "@discontent/component-library/components/Form/inputs/Markdown/common"; import { DummyMultiplyable, RecipeCustomControls } from "../RecipeMarkdown"; -import StyledMarkdown from "component-library/components/Markdown"; +import StyledMarkdown from "@discontent/component-library/components/Markdown"; import { PasteField } from "../PasteField"; function IngredientInput({ diff --git a/websites/recipe-website/common/components/Form/Instructions/InstructionTextInput/index.tsx b/websites/recipe-website/common/components/Form/Instructions/InstructionTextInput/index.tsx index 6010d753..33d3aca9 100644 --- a/websites/recipe-website/common/components/Form/Instructions/InstructionTextInput/index.tsx +++ b/websites/recipe-website/common/components/Form/Instructions/InstructionTextInput/index.tsx @@ -1,7 +1,7 @@ "use client"; -import { MarkdownInput } from "component-library/components/Form/inputs/Markdown"; -import { MarkdownInputProps } from "component-library/components/Form/inputs/Markdown/common"; +import { MarkdownInput } from "@discontent/component-library/components/Form/inputs/Markdown"; +import { MarkdownInputProps } from "@discontent/component-library/components/Form/inputs/Markdown/common"; import { DummyMultiplyable, RecipeCustomControls } from "../../RecipeMarkdown"; import { VideoTime } from "../../../View/Instructions/VideoTime"; diff --git a/websites/recipe-website/common/components/Form/Instructions/index.tsx b/websites/recipe-website/common/components/Form/Instructions/index.tsx index 1875aecf..ebd9bfe2 100644 --- a/websites/recipe-website/common/components/Form/Instructions/index.tsx +++ b/websites/recipe-website/common/components/Form/Instructions/index.tsx @@ -4,15 +4,15 @@ import { InstructionEntry, InstructionGroup, } from "../../../controller/types"; -import { Button } from "component-library/components/Button"; -import { FieldWrapper } from "component-library/components/Form"; +import { Button } from "@discontent/component-library/components/Button"; +import { FieldWrapper } from "@discontent/component-library/components/Form"; import { InputListControls, KeyListAction, ListInputButton, useKeyList, -} from "component-library/components/Form/inputs/List"; -import { TextInput } from "component-library/components/Form/inputs/Text"; +} from "@discontent/component-library/components/Form/inputs/List"; +import { TextInput } from "@discontent/component-library/components/Form/inputs/Text"; import InstructionTextInput from "./InstructionTextInput"; import { ActionDispatch, useEffect, useState } from "react"; import { PasteField } from "../PasteField"; diff --git a/websites/recipe-website/common/components/Form/PasteField/index.tsx b/websites/recipe-website/common/components/Form/PasteField/index.tsx index f0e2f571..a2b5d6dc 100644 --- a/websites/recipe-website/common/components/Form/PasteField/index.tsx +++ b/websites/recipe-website/common/components/Form/PasteField/index.tsx @@ -1,6 +1,6 @@ import clsx from "clsx"; -import { Button } from "component-library/components/Button"; -import { baseInputStyle } from "component-library/components/Form"; +import { Button } from "@discontent/component-library/components/Button"; +import { baseInputStyle } from "@discontent/component-library/components/Form"; import { useRef } from "react"; interface PasteFieldProps { diff --git a/websites/recipe-website/common/components/Form/RecipeMarkdown/index.tsx b/websites/recipe-website/common/components/Form/RecipeMarkdown/index.tsx index f7048868..bb9d0ed2 100644 --- a/websites/recipe-website/common/components/Form/RecipeMarkdown/index.tsx +++ b/websites/recipe-website/common/components/Form/RecipeMarkdown/index.tsx @@ -3,7 +3,7 @@ import { FormatButton, MarkdownControlsProps, wrapSelection, -} from "component-library/components/Form/inputs/Markdown/common"; +} from "@discontent/component-library/components/Form/inputs/Markdown/common"; export function MultiplyableControl({ textArea }: MarkdownControlsProps) { const handleMultiplyableClick = () => { diff --git a/websites/recipe-website/common/components/Form/Timeline/index.tsx b/websites/recipe-website/common/components/Form/Timeline/index.tsx index b1566508..17d6a694 100644 --- a/websites/recipe-website/common/components/Form/Timeline/index.tsx +++ b/websites/recipe-website/common/components/Form/Timeline/index.tsx @@ -1,18 +1,18 @@ import clsx from "clsx"; import { RecipeFormErrors } from "../../../controller/formState"; import { TimelineEvent, Timeline } from "../../../controller/types"; -import { Button } from "component-library/components/Button"; -import { FieldWrapper } from "component-library/components/Form"; +import { Button } from "@discontent/component-library/components/Button"; +import { FieldWrapper } from "@discontent/component-library/components/Form"; import { InputListControls, KeyListAction, useKeyList, -} from "component-library/components/Form/inputs/List"; +} from "@discontent/component-library/components/Form/inputs/List"; import { ActionDispatch, useEffect } from "react"; -import { TextInput } from "component-library/components/Form/inputs/Text"; -import { DurationInput } from "component-library/components/Form/inputs/Duration"; -import { CheckboxInput } from "component-library/components/Form/inputs/Checkbox"; -import { TextAreaInput } from "component-library/components/Form/inputs/TextArea"; +import { TextInput } from "@discontent/component-library/components/Form/inputs/Text"; +import { DurationInput } from "@discontent/component-library/components/Form/inputs/Duration"; +import { CheckboxInput } from "@discontent/component-library/components/Form/inputs/Checkbox"; +import { TextAreaInput } from "@discontent/component-library/components/Form/inputs/TextArea"; function TimelineEventInput({ name, diff --git a/websites/recipe-website/common/components/Form/index.tsx b/websites/recipe-website/common/components/Form/index.tsx index 043cbe38..09cc3687 100644 --- a/websites/recipe-website/common/components/Form/index.tsx +++ b/websites/recipe-website/common/components/Form/index.tsx @@ -7,16 +7,16 @@ import createDefaultSlug from "recipe-website-common/controller/createSlug"; import { IngredientsListInput } from "recipe-website-common/components/Form/Ingredients"; import { InstructionsListInput } from "recipe-website-common/components/Form/Instructions"; import { TimelinesInput } from "recipe-website-common/components/Form/Timeline"; -import { DateTimeInput } from "component-library/components/Form/inputs/DateTime"; -import { TextInput } from "component-library/components/Form/inputs/Text"; -import { MarkdownInput } from "component-library/components/Form/inputs/Markdown"; -import { InlineMarkdownInput } from "component-library/components/Form/inputs/Markdown/Inline"; +import { DateTimeInput } from "@discontent/component-library/components/Form/inputs/DateTime"; +import { TextInput } from "@discontent/component-library/components/Form/inputs/Text"; +import { MarkdownInput } from "@discontent/component-library/components/Form/inputs/Markdown"; +import { InlineMarkdownInput } from "@discontent/component-library/components/Form/inputs/Markdown/Inline"; import { ImageInput } from "./Image"; -import { VideoInput } from "component-library/components/Form/inputs/Video"; -import { StaticImageProps } from "next-static-image/src"; -import { VideoPlayerProvider } from "component-library/components/VideoPlayer/Provider"; -import { DurationInput } from "component-library/components/Form/inputs/Duration"; -import { useCurrentTimezone } from "content-engine/hooks/useCurrentTimezone"; +import { VideoInput } from "@discontent/component-library/components/Form/inputs/Video"; +import { StaticImageProps } from "@discontent/next-static-image/src"; +import { VideoPlayerProvider } from "@discontent/component-library/components/VideoPlayer/Provider"; +import { DurationInput } from "@discontent/component-library/components/Form/inputs/Duration"; +import { useCurrentTimezone } from "@discontent/cms/hooks/useCurrentTimezone"; import { DummyMultiplyable, YieldControls } from "./RecipeMarkdown"; diff --git a/websites/recipe-website/common/components/Form/inputs/RecipeSelect/index.tsx b/websites/recipe-website/common/components/Form/inputs/RecipeSelect/index.tsx index 831c2c5a..5257ae80 100644 --- a/websites/recipe-website/common/components/Form/inputs/RecipeSelect/index.tsx +++ b/websites/recipe-website/common/components/Form/inputs/RecipeSelect/index.tsx @@ -1,8 +1,11 @@ "use client"; import { useState, useEffect } from "react"; -import { Errors, FieldWrapper } from "component-library/components/Form"; -import { Button } from "component-library/components/Button"; +import { + Errors, + FieldWrapper, +} from "@discontent/component-library/components/Form"; +import { Button } from "@discontent/component-library/components/Button"; import SearchFormModal from "../../../SearchForm/SearchFormModal"; import { MassagedRecipeEntry } from "../../../../controller/data/read"; diff --git a/websites/recipe-website/common/components/List/FeaturedRecipe/index.tsx b/websites/recipe-website/common/components/List/FeaturedRecipe/index.tsx index 3a53c003..13675945 100644 --- a/websites/recipe-website/common/components/List/FeaturedRecipe/index.tsx +++ b/websites/recipe-website/common/components/List/FeaturedRecipe/index.tsx @@ -1,7 +1,7 @@ import Link from "next/link"; import { MassagedFeaturedRecipeEntry } from "../../../controller/data/readFeaturedRecipes"; import { RecipeImage } from "../../RecipeImage"; -import Markdown from "component-library/components/Markdown"; +import Markdown from "@discontent/component-library/components/Markdown"; import { RecipeCard, RecipeCardLink, diff --git a/websites/recipe-website/common/components/PageLayout/index.tsx b/websites/recipe-website/common/components/PageLayout/index.tsx index e740ef89..5777415f 100644 --- a/websites/recipe-website/common/components/PageLayout/index.tsx +++ b/websites/recipe-website/common/components/PageLayout/index.tsx @@ -1,5 +1,5 @@ import { ReactNode } from "react"; -import { cn } from "component-library/lib/utils"; +import { cn } from "@discontent/component-library/lib/utils"; export interface PageMainProps { children: ReactNode; diff --git a/websites/recipe-website/common/components/RecipeImage/index.tsx b/websites/recipe-website/common/components/RecipeImage/index.tsx index 4a39317a..181e441e 100644 --- a/websites/recipe-website/common/components/RecipeImage/index.tsx +++ b/websites/recipe-website/common/components/RecipeImage/index.tsx @@ -1,10 +1,10 @@ /* eslint-disable @next/next/no-img-element */ import { join } from "path"; -import { getContentDirectory } from "content-engine/fs/getContentDirectory"; +import { getContentDirectory } from "@discontent/cms/fs/getContentDirectory"; import { TransformedStaticImageProps, getStaticImageProps, -} from "next-static-image/src"; +} from "@discontent/next-static-image/src"; import { getRecipeUploadPath } from "../../controller/filesystemDirectories"; const localOutputDirectory = join(getContentDirectory(), "transformed-images"); diff --git a/websites/recipe-website/common/components/RecipeIndexPage/FirstRecipeIndexPage.tsx b/websites/recipe-website/common/components/RecipeIndexPage/FirstRecipeIndexPage.tsx index 58e9ae18..bbb8fc5a 100644 --- a/websites/recipe-website/common/components/RecipeIndexPage/FirstRecipeIndexPage.tsx +++ b/websites/recipe-website/common/components/RecipeIndexPage/FirstRecipeIndexPage.tsx @@ -8,5 +8,7 @@ export default function FirstRecipeIndexPage({ recipes: MassagedRecipeEntry[]; more: boolean; }) { - return ; + return ( + + ); } diff --git a/websites/recipe-website/common/components/RecipeIndexPage/index.tsx b/websites/recipe-website/common/components/RecipeIndexPage/index.tsx index 52e37822..77c8ead2 100644 --- a/websites/recipe-website/common/components/RecipeIndexPage/index.tsx +++ b/websites/recipe-website/common/components/RecipeIndexPage/index.tsx @@ -11,6 +11,10 @@ export default function RecipeIndexPage({ more: boolean; }) { return ( - + ); } diff --git a/websites/recipe-website/common/components/RenderedPage/index.tsx b/websites/recipe-website/common/components/RenderedPage/index.tsx index 1fe25b60..370bf4fa 100644 --- a/websites/recipe-website/common/components/RenderedPage/index.tsx +++ b/websites/recipe-website/common/components/RenderedPage/index.tsx @@ -1,5 +1,5 @@ -import { PageView } from "pages-collection/components/View"; -import { Page } from "pages-collection/controller/types"; +import { PageView } from "@discontent/pages-collection/components/View"; +import { Page } from "@discontent/pages-collection/controller/types"; import { ReactNode } from "react"; import { PageMain, diff --git a/websites/recipe-website/common/components/SearchForm/SearchFormModal.tsx b/websites/recipe-website/common/components/SearchForm/SearchFormModal.tsx index 93dbc32a..44f2b4fb 100644 --- a/websites/recipe-website/common/components/SearchForm/SearchFormModal.tsx +++ b/websites/recipe-website/common/components/SearchForm/SearchFormModal.tsx @@ -6,7 +6,7 @@ import { DialogContent, DialogHeader, DialogTitle, -} from "component-library/components/ui/dialog"; +} from "@discontent/component-library/components/ui/dialog"; import { SearchInput } from "./SearchInput"; import { SearchResultsModal } from "./SearchResultsModal"; import { useSearchURLSync } from "./useSearchURLSync"; diff --git a/websites/recipe-website/common/components/SearchForm/SearchInput.tsx b/websites/recipe-website/common/components/SearchForm/SearchInput.tsx index 695b5403..0a1c07d1 100644 --- a/websites/recipe-website/common/components/SearchForm/SearchInput.tsx +++ b/websites/recipe-website/common/components/SearchForm/SearchInput.tsx @@ -1,7 +1,7 @@ "use client"; -import { Button } from "component-library/components/Button"; -import { TextInput } from "component-library/components/Form/inputs/Text"; +import { Button } from "@discontent/component-library/components/Button"; +import { TextInput } from "@discontent/component-library/components/Form/inputs/Text"; import { useSearch } from "./SearchContext"; export function SearchInput() { diff --git a/websites/recipe-website/common/components/SearchForm/SearchPagination.tsx b/websites/recipe-website/common/components/SearchForm/SearchPagination.tsx index 901c8edd..7fc1f262 100644 --- a/websites/recipe-website/common/components/SearchForm/SearchPagination.tsx +++ b/websites/recipe-website/common/components/SearchForm/SearchPagination.tsx @@ -1,6 +1,6 @@ "use client"; -import { Button } from "component-library/components/Button"; +import { Button } from "@discontent/component-library/components/Button"; import { useSearch } from "./SearchContext"; export function SearchPagination() { diff --git a/websites/recipe-website/common/components/SearchForm/SearchResultsModal.tsx b/websites/recipe-website/common/components/SearchForm/SearchResultsModal.tsx index 2a94b683..16ff68f0 100644 --- a/websites/recipe-website/common/components/SearchForm/SearchResultsModal.tsx +++ b/websites/recipe-website/common/components/SearchForm/SearchResultsModal.tsx @@ -8,14 +8,10 @@ interface SearchResultsModalProps { onRecipeSelect: (recipe: MassagedRecipeEntry) => void; } -export function SearchResultsModal({ onRecipeSelect }: SearchResultsModalProps) { - const { - query, - searchedRecipes, - allRecipes, - status, - error, - } = useSearch(); +export function SearchResultsModal({ + onRecipeSelect, +}: SearchResultsModalProps) { + const { query, searchedRecipes, allRecipes, status, error } = useSearch(); if (status === "error") { return

Error: {error?.message}

; diff --git a/websites/recipe-website/common/components/SearchList/index.tsx b/websites/recipe-website/common/components/SearchList/index.tsx index 4a2ef6e1..943fa253 100644 --- a/websites/recipe-website/common/components/SearchList/index.tsx +++ b/websites/recipe-website/common/components/SearchList/index.tsx @@ -1,6 +1,6 @@ import { MassagedRecipeEntry } from "../../controller/data/read"; import { Fragment, ReactNode } from "react"; -import { PureStaticImage } from "next-static-image/src/Pure"; +import { PureStaticImage } from "@discontent/next-static-image/src/Pure"; import { RecipeCard, RecipeCardImageContainer, diff --git a/websites/recipe-website/common/components/View/Ingredients/index.tsx b/websites/recipe-website/common/components/View/Ingredients/index.tsx index 87c20b48..71e7018e 100644 --- a/websites/recipe-website/common/components/View/Ingredients/index.tsx +++ b/websites/recipe-website/common/components/View/Ingredients/index.tsx @@ -4,8 +4,8 @@ import React from "react"; import { Ingredient } from "../../../controller/types"; import { Multiplyable } from "../Multiplier/Multiplyable"; -import StyledMarkdown from "component-library/components/Markdown"; -import { PaddedButton } from "component-library/components/Button"; +import StyledMarkdown from "@discontent/component-library/components/Markdown"; +import { PaddedButton } from "@discontent/component-library/components/Button"; export function IngredientItem({ ingredient, type }: Ingredient) { // If the ingredient is a heading, render it as such diff --git a/websites/recipe-website/common/components/View/Instructions/VideoTime.tsx b/websites/recipe-website/common/components/View/Instructions/VideoTime.tsx index 63350e3c..9122907a 100644 --- a/websites/recipe-website/common/components/View/Instructions/VideoTime.tsx +++ b/websites/recipe-website/common/components/View/Instructions/VideoTime.tsx @@ -1,6 +1,6 @@ "use client"; -import { useVideoPlayer } from "component-library/components/VideoPlayer/Provider"; +import { useVideoPlayer } from "@discontent/component-library/components/VideoPlayer/Provider"; import { ReactNode } from "react"; export function VideoTime({ diff --git a/websites/recipe-website/common/components/View/Instructions/index.tsx b/websites/recipe-website/common/components/View/Instructions/index.tsx index bcca3c03..37da428c 100644 --- a/websites/recipe-website/common/components/View/Instructions/index.tsx +++ b/websites/recipe-website/common/components/View/Instructions/index.tsx @@ -1,9 +1,9 @@ import { InstructionEntry } from "../../../controller/types"; -import Markdown from "component-library/components/Markdown"; +import Markdown from "@discontent/component-library/components/Markdown"; import { Multiplyable } from "../Multiplier/Multiplyable"; import { VideoTime } from "./VideoTime"; -import { PaddedButton } from "component-library/components/Button"; +import { PaddedButton } from "@discontent/component-library/components/Button"; const stepHeadingStyle = "text-lg font-bold my-2 border-b border-white"; const childHeadingStyle = "text-base font-bold my-1 border-b border-white"; diff --git a/websites/recipe-website/common/components/View/JsonLD/index.tsx b/websites/recipe-website/common/components/View/JsonLD/index.tsx index 5cfee1a4..6f91db6c 100644 --- a/websites/recipe-website/common/components/View/JsonLD/index.tsx +++ b/websites/recipe-website/common/components/View/JsonLD/index.tsx @@ -1,7 +1,7 @@ import { Recipe as JsonLDRecipe, WithContext } from "schema-dts"; import { Recipe } from "../../../controller/types"; import { flattenMarkdown } from "recipe-website-common/controller/buildIndexValue"; -import { getWebsiteRoot } from "content-engine/util/getWebsiteRoot"; +import { getWebsiteRoot } from "@discontent/cms/util/getWebsiteRoot"; function buildJsonLDIngredients( recipe: Recipe, diff --git a/websites/recipe-website/common/components/View/Multiplier/index.tsx b/websites/recipe-website/common/components/View/Multiplier/index.tsx index c0871560..8daafd55 100644 --- a/websites/recipe-website/common/components/View/Multiplier/index.tsx +++ b/websites/recipe-website/common/components/View/Multiplier/index.tsx @@ -2,12 +2,12 @@ import React, { ChangeEvent } from "react"; -import { TextInput } from "component-library/components/Form/inputs/Text"; +import { TextInput } from "@discontent/component-library/components/Form/inputs/Text"; import { Recipe } from "../../../controller/types"; import { InfoCard } from "../shared"; import { useMultiplier } from "./Provider"; import { Multiplyable } from "./Multiplyable"; -import StyledMarkdown from "component-library/components/Markdown"; +import StyledMarkdown from "@discontent/component-library/components/Markdown"; export function MultiplierInput() { const [{ input }, setMultiplier] = useMultiplier(); diff --git a/websites/recipe-website/common/components/View/index.tsx b/websites/recipe-website/common/components/View/index.tsx index 4f4d0493..91f7ad78 100644 --- a/websites/recipe-website/common/components/View/index.tsx +++ b/websites/recipe-website/common/components/View/index.tsx @@ -1,14 +1,14 @@ /* eslint-disable @next/next/no-img-element */ import { Recipe } from "../../controller/types"; -import Markdown from "component-library/components/Markdown"; +import Markdown from "@discontent/component-library/components/Markdown"; import { getTransformedRecipeImageProps } from "../RecipeImage"; import { MultipliedServings, MultiplierInput } from "./Multiplier"; import { InfoCard } from "./shared"; import { Instructions } from "./Instructions"; import { MultiplierProvider } from "./Multiplier/Provider"; -import { VideoPlayerProvider } from "component-library/components/VideoPlayer/Provider"; -import { VideoPlayer } from "component-library/components/VideoPlayer"; +import { VideoPlayerProvider } from "@discontent/component-library/components/VideoPlayer/Provider"; +import { VideoPlayer } from "@discontent/component-library/components/VideoPlayer"; import { RecipeJsonLD } from "./JsonLD"; import { Ingredients } from "./Ingredients"; import { TimelineView } from "./Timeline"; diff --git a/websites/recipe-website/common/controller/data/read.ts b/websites/recipe-website/common/controller/data/read.ts index 21364784..9a4a903b 100644 --- a/websites/recipe-website/common/controller/data/read.ts +++ b/websites/recipe-website/common/controller/data/read.ts @@ -1,5 +1,5 @@ -import { readContentFile } from "content-engine/content/readContentFile"; -import { readContentIndex } from "content-engine/content/readContentIndex"; +import { readContentFile } from "@discontent/cms/content/readContentFile"; +import { readContentIndex } from "@discontent/cms/content/readContentIndex"; import { recipeContentConfig } from "../recipeContentConfig"; import { Recipe, RecipeEntryKey, RecipeEntryValue } from "../types"; diff --git a/websites/recipe-website/common/controller/data/readFeaturedRecipes.ts b/websites/recipe-website/common/controller/data/readFeaturedRecipes.ts index e9574bd2..b3cbe18e 100644 --- a/websites/recipe-website/common/controller/data/readFeaturedRecipes.ts +++ b/websites/recipe-website/common/controller/data/readFeaturedRecipes.ts @@ -1,5 +1,5 @@ -import { readContentFile } from "content-engine/content/readContentFile"; -import { readContentIndex } from "content-engine/content/readContentIndex"; +import { readContentFile } from "@discontent/cms/content/readContentFile"; +import { readContentIndex } from "@discontent/cms/content/readContentIndex"; import { featuredRecipeContentConfig } from "../featuredRecipeContentConfig"; import { FeaturedRecipe, diff --git a/websites/recipe-website/common/controller/featuredRecipeContentConfig.ts b/websites/recipe-website/common/controller/featuredRecipeContentConfig.ts index b4d22903..a8482436 100644 --- a/websites/recipe-website/common/controller/featuredRecipeContentConfig.ts +++ b/websites/recipe-website/common/controller/featuredRecipeContentConfig.ts @@ -1,4 +1,4 @@ -import type { ContentTypeConfig } from "content-engine/content/types"; +import type { ContentTypeConfig } from "@discontent/cms/content/types"; import buildFeaturedRecipeIndexValue from "./buildFeaturedRecipeIndexValue"; import createDefaultFeaturedRecipeSlug from "./createFeaturedRecipeSlug"; import { diff --git a/websites/recipe-website/common/controller/featuredRecipeFormState.ts b/websites/recipe-website/common/controller/featuredRecipeFormState.ts index 4a46c93b..0e4d9f29 100644 --- a/websites/recipe-website/common/controller/featuredRecipeFormState.ts +++ b/websites/recipe-website/common/controller/featuredRecipeFormState.ts @@ -10,4 +10,5 @@ export interface FeaturedRecipeFormErrors extends Record< slug?: string[]; } -export type FeaturedRecipeFormState = ContentFormState; +export type FeaturedRecipeFormState = + ContentFormState; diff --git a/websites/recipe-website/common/controller/filesystemDirectories.ts b/websites/recipe-website/common/controller/filesystemDirectories.ts index 9bac31db..a380ce5a 100644 --- a/websites/recipe-website/common/controller/filesystemDirectories.ts +++ b/websites/recipe-website/common/controller/filesystemDirectories.ts @@ -1,6 +1,6 @@ import { resolve, join } from "path"; -import { getContentDirectory } from "content-engine/fs/getContentDirectory"; +import { getContentDirectory } from "@discontent/cms/fs/getContentDirectory"; export function getRecipesBaseDirectory(providedContentDirectory?: string) { return resolve(providedContentDirectory || getContentDirectory(), "recipes"); diff --git a/websites/recipe-website/common/controller/formState.ts b/websites/recipe-website/common/controller/formState.ts index caf513f2..930ba9e7 100644 --- a/websites/recipe-website/common/controller/formState.ts +++ b/websites/recipe-website/common/controller/formState.ts @@ -5,7 +5,10 @@ import type { } from "recipe-website-common/controller/types"; export type ContentFormState< - TErrors extends Record = Record, + TErrors extends Record = Record< + string, + string[] | undefined + >, TFormData = Record, > = { errors?: TErrors; @@ -36,4 +39,7 @@ export type RecipeFormData = { videoUrl?: string; }; -export type RecipeFormState = ContentFormState; +export type RecipeFormState = ContentFormState< + RecipeFormErrors, + RecipeFormData +>; diff --git a/websites/recipe-website/common/controller/recipeContentConfig.ts b/websites/recipe-website/common/controller/recipeContentConfig.ts index 63a237fb..22b139f7 100644 --- a/websites/recipe-website/common/controller/recipeContentConfig.ts +++ b/websites/recipe-website/common/controller/recipeContentConfig.ts @@ -1,4 +1,4 @@ -import type { ContentTypeConfig } from "content-engine/content/types"; +import type { ContentTypeConfig } from "@discontent/cms/content/types"; import buildRecipeIndexValue from "./buildIndexValue"; import createDefaultSlug from "./createSlug"; import { featuredRecipeContentConfig } from "./featuredRecipeContentConfig"; diff --git a/websites/recipe-website/common/package.json b/websites/recipe-website/common/package.json index 793ba631..a7b0bfbe 100644 --- a/websites/recipe-website/common/package.json +++ b/websites/recipe-website/common/package.json @@ -12,8 +12,8 @@ "dependencies": { "@sindresorhus/slugify": "^3.0.0", "clsx": "^2.1.1", - "component-library": "^1.0.0", - "content-engine": "^1.0.0", + "@discontent/component-library": "^1.0.0", + "@discontent/cms": "^1.0.0", "flexsearch": "^0.8.212", "format-quantity": "^3.0.0", "fraction.js": "^5.3.4", @@ -21,9 +21,9 @@ "lmdb": "^3.5.1", "lodash": "^4.17.23", "markdown-to-jsx": "^9.6.1", - "menus-collection": "^1.0.0", + "@discontent/menus-collection": "^1.0.0", "next": "16.1.6", - "next-static-image": "^0.0.1", + "@discontent/next-static-image": "^0.0.1", "plaiceholder": "^3.0.0", "react": "19.2.4", "sharp": "0.34.5", diff --git a/websites/recipe-website/common/util/importRecipeData.ts b/websites/recipe-website/common/util/importRecipeData.ts index ed8d4a0a..deb7028b 100644 --- a/websites/recipe-website/common/util/importRecipeData.ts +++ b/websites/recipe-website/common/util/importRecipeData.ts @@ -108,7 +108,9 @@ function getImageUrl(input: string | { url: string }) { return typeof input === "string" ? input : input.url; } -function getVideoUrl(input: string | { contentUrl?: string; embedUrl?: string; url?: string }) { +function getVideoUrl( + input: string | { contentUrl?: string; embedUrl?: string; url?: string }, +) { if (typeof input === "string") return input; return input.contentUrl || input.embedUrl || input.url; } @@ -130,18 +132,18 @@ function isVideoUrl(url: string): boolean { try { const urlObj = new URL(url); const videoHosts = [ - 'youtube.com', - 'youtu.be', - 'vimeo.com', - 'twitch.tv', - 'dailymotion.com', - 'facebook.com', - 'soundcloud.com', - 'streamable.com', - 'wistia.com', - 'mixcloud.com' + "youtube.com", + "youtu.be", + "vimeo.com", + "twitch.tv", + "dailymotion.com", + "facebook.com", + "soundcloud.com", + "streamable.com", + "wistia.com", + "mixcloud.com", ]; - return videoHosts.some(host => urlObj.hostname.includes(host)); + return videoHosts.some((host) => urlObj.hostname.includes(host)); } catch { return false; } diff --git a/websites/recipe-website/editor/.prettierignore b/websites/recipe-website/editor/.prettierignore deleted file mode 100644 index 2dd38555..00000000 --- a/websites/recipe-website/editor/.prettierignore +++ /dev/null @@ -1,2 +0,0 @@ -cypress/fixtures -.next diff --git a/websites/recipe-website/editor/controller/actions/editorContentConfig.ts b/websites/recipe-website/editor/controller/actions/editorContentConfig.ts index 85ff4a59..62e394b5 100644 --- a/websites/recipe-website/editor/controller/actions/editorContentConfig.ts +++ b/websites/recipe-website/editor/controller/actions/editorContentConfig.ts @@ -2,7 +2,7 @@ import type { ContentFormState } from "recipe-website-common/controller/formStat import type { ContentTypeConfig, UploadSpec, -} from "content-engine/content/types"; +} from "@discontent/cms/content/types"; import type { Key } from "lmdb"; export type ContentSuccessConfig = { diff --git a/websites/recipe-website/editor/controller/actions/featuredRecipes.ts b/websites/recipe-website/editor/controller/actions/featuredRecipes.ts index e94d7021..54fb7a3d 100644 --- a/websites/recipe-website/editor/controller/actions/featuredRecipes.ts +++ b/websites/recipe-website/editor/controller/actions/featuredRecipes.ts @@ -1,7 +1,7 @@ "use server"; -import { rebuildIndex } from "content-engine/content/rebuildIndex"; -import { getContentDirectory } from "content-engine/fs/getContentDirectory"; +import { rebuildIndex } from "@discontent/cms/content/rebuildIndex"; +import { getContentDirectory } from "@discontent/cms/fs/getContentDirectory"; import { revalidatePath } from "next/cache"; import slugify from "@sindresorhus/slugify"; import createDefaultFeaturedRecipeSlug from "recipe-website-common/controller/createFeaturedRecipeSlug"; diff --git a/websites/recipe-website/editor/controller/actions/genericActions.ts b/websites/recipe-website/editor/controller/actions/genericActions.ts index 9976c14f..de23333a 100644 --- a/websites/recipe-website/editor/controller/actions/genericActions.ts +++ b/websites/recipe-website/editor/controller/actions/genericActions.ts @@ -2,10 +2,10 @@ import type { Key } from "lmdb"; import { createContent, SlugConflictError, -} from "content-engine/content/createContent"; -import { deleteContent } from "content-engine/content/deleteContent"; -import { updateContent } from "content-engine/content/updateContent"; -import { getContentDirectory } from "content-engine/fs/getContentDirectory"; +} from "@discontent/cms/content/createContent"; +import { deleteContent } from "@discontent/cms/content/deleteContent"; +import { updateContent } from "@discontent/cms/content/updateContent"; +import { getContentDirectory } from "@discontent/cms/fs/getContentDirectory"; import { revalidatePath } from "next/cache"; import { redirect } from "next/navigation"; import type { ContentFormState } from "recipe-website-common/controller/formState"; diff --git a/websites/recipe-website/editor/controller/actions/index.ts b/websites/recipe-website/editor/controller/actions/index.ts index 20f414ae..5000fc85 100644 --- a/websites/recipe-website/editor/controller/actions/index.ts +++ b/websites/recipe-website/editor/controller/actions/index.ts @@ -2,11 +2,11 @@ import { auth } from "@/auth"; import slugify from "@sindresorhus/slugify"; -import { deleteContent } from "content-engine/content/deleteContent"; -import { rebuildIndex } from "content-engine/content/rebuildIndex"; -import type { UploadSpec } from "content-engine/content/types"; -import { getContentDirectory } from "content-engine/fs/getContentDirectory"; -import { directoryIsGitRepo } from "content-engine/git/commit"; +import { deleteContent } from "@discontent/cms/content/deleteContent"; +import { rebuildIndex } from "@discontent/cms/content/rebuildIndex"; +import type { UploadSpec } from "@discontent/cms/content/types"; +import { getContentDirectory } from "@discontent/cms/fs/getContentDirectory"; +import { directoryIsGitRepo } from "@discontent/cms/git/commit"; import { writeFile } from "fs-extra"; import { revalidatePath } from "next/cache"; import { join } from "node:path"; diff --git a/websites/recipe-website/editor/controller/parseFeaturedRecipeFormData.ts b/websites/recipe-website/editor/controller/parseFeaturedRecipeFormData.ts index f40c3712..f41a4c73 100644 --- a/websites/recipe-website/editor/controller/parseFeaturedRecipeFormData.ts +++ b/websites/recipe-website/editor/controller/parseFeaturedRecipeFormData.ts @@ -1,6 +1,6 @@ import { ZodSafeParseResult, z } from "zod"; -import parseFormData from "content-engine/forms/parseFormData"; -import dateEpochSchema from "content-engine/forms/schema/dateEpoch"; +import parseFormData from "@discontent/cms/forms/parseFormData"; +import dateEpochSchema from "@discontent/cms/forms/schema/dateEpoch"; const FeaturedRecipeFormSchema = z.object({ recipe: z.string().min(1), diff --git a/websites/recipe-website/editor/controller/parseFormData.ts b/websites/recipe-website/editor/controller/parseFormData.ts index fd3b0fdd..9b65571c 100644 --- a/websites/recipe-website/editor/controller/parseFormData.ts +++ b/websites/recipe-website/editor/controller/parseFormData.ts @@ -1,6 +1,6 @@ import { ZodSafeParseResult, z } from "zod"; -import parseFormData from "content-engine/forms/parseFormData"; -import dateEpochSchema from "content-engine/forms/schema/dateEpoch"; +import parseFormData from "@discontent/cms/forms/parseFormData"; +import dateEpochSchema from "@discontent/cms/forms/schema/dateEpoch"; const durationSchema = z .object({ diff --git a/websites/recipe-website/editor/cypress/fixtures/yt-dlp/ytdlp-mimic.mjs b/websites/recipe-website/editor/cypress/fixtures/yt-dlp/ytdlp-mimic.mjs index 0eaf26fd..530026b9 100755 --- a/websites/recipe-website/editor/cypress/fixtures/yt-dlp/ytdlp-mimic.mjs +++ b/websites/recipe-website/editor/cypress/fixtures/yt-dlp/ytdlp-mimic.mjs @@ -19,7 +19,9 @@ const files = await readdir(responsesDir); let matched = null; for (const file of files) { if (!file.endsWith(".json")) continue; - const content = JSON.parse(await readFile(resolve(responsesDir, file), "utf8")); + const content = JSON.parse( + await readFile(resolve(responsesDir, file), "utf8"), + ); if (content.url === url) { matched = content; break; diff --git a/websites/recipe-website/editor/migrations/0_rewrite/up.ts b/websites/recipe-website/editor/migrations/0_rewrite/up.ts index a80a3b83..c1cdd76c 100644 --- a/websites/recipe-website/editor/migrations/0_rewrite/up.ts +++ b/websites/recipe-website/editor/migrations/0_rewrite/up.ts @@ -1,4 +1,4 @@ -import { migrateData } from "content-engine/content/migrate"; +import { migrateData } from "@discontent/cms/content/migrate"; import { recipeContentConfig } from "recipe-website-common/controller/recipeContentConfig"; migrateData(recipeContentConfig, async (recipeData) => { diff --git a/websites/recipe-website/editor/package.json b/websites/recipe-website/editor/package.json index 23541ba2..c11e7c50 100644 --- a/websites/recipe-website/editor/package.json +++ b/websites/recipe-website/editor/package.json @@ -22,8 +22,8 @@ "@tanstack/react-query": "^5.90.20", "bcrypt": "^6.0.0", "clsx": "^2.1.1", - "component-library": "^1.0.0", - "content-engine": "^1.0.0", + "@discontent/component-library": "^1.0.0", + "@discontent/cms": "^1.0.0", "date-fns": "^4.1.0", "entities": "^7.0.1", "execa": "^9.6.1", @@ -38,11 +38,11 @@ "lodash": "^4.17.23", "markdown-to-jsx": "^9.6.1", "mdast-util-to-markdown": "^2.1.2", - "menus-collection": "^1.0.0", + "@discontent/menus-collection": "^1.0.0", "next": "16.1.6", "next-auth": "5.0.0-beta.30", - "next-static-image": "^0.0.1", - "pages-collection": "^1.0.0", + "@discontent/next-static-image": "^0.0.1", + "@discontent/pages-collection": "^1.0.0", "parse5": "^8.0.0", "react": "19.2.4", "react-dom": "19.2.4", diff --git a/websites/recipe-website/editor/scripts/create-user.ts b/websites/recipe-website/editor/scripts/create-user.ts index 01cc3c91..b6efcfb0 100644 --- a/websites/recipe-website/editor/scripts/create-user.ts +++ b/websites/recipe-website/editor/scripts/create-user.ts @@ -4,7 +4,7 @@ import { resolve } from "path"; import { read } from "read"; import process from "node:process"; import { parseArgs, ParseArgsOptionsConfig } from "node:util"; -import { getContentDirectory } from "content-engine/fs/getContentDirectory"; +import { getContentDirectory } from "@discontent/cms/fs/getContentDirectory"; interface UserData { email: string; diff --git a/websites/recipe-website/editor/src/app/(editor)/(menus)/menus/edit/[...slug]/form.tsx b/websites/recipe-website/editor/src/app/(editor)/(menus)/menus/edit/[...slug]/form.tsx index de783482..7972dd77 100644 --- a/websites/recipe-website/editor/src/app/(editor)/(menus)/menus/edit/[...slug]/form.tsx +++ b/websites/recipe-website/editor/src/app/(editor)/(menus)/menus/edit/[...slug]/form.tsx @@ -1,11 +1,11 @@ "use client"; -import UpdateMenuFields from "menus-collection/components/Form/Update"; +import UpdateMenuFields from "@discontent/menus-collection/components/Form/Update"; import { useActionState } from "react"; -import { SubmitButton } from "component-library/components/SubmitButton"; -import { Menu } from "menus-collection/controller/types"; -import { MenuFormState } from "menus-collection/controller/formState"; -import updateMenu from "menus-collection/controller/actions/update"; +import { SubmitButton } from "@discontent/component-library/components/SubmitButton"; +import { Menu } from "@discontent/menus-collection/controller/types"; +import { MenuFormState } from "@discontent/menus-collection/controller/formState"; +import updateMenu from "@discontent/menus-collection/controller/actions/update"; import Link from "next/link"; export default function EditMenuForm({ diff --git a/websites/recipe-website/editor/src/app/(editor)/(menus)/menus/edit/[...slug]/page.tsx b/websites/recipe-website/editor/src/app/(editor)/(menus)/menus/edit/[...slug]/page.tsx index 2e2dcd4e..8a7e38bb 100644 --- a/websites/recipe-website/editor/src/app/(editor)/(menus)/menus/edit/[...slug]/page.tsx +++ b/websites/recipe-website/editor/src/app/(editor)/(menus)/menus/edit/[...slug]/page.tsx @@ -1,7 +1,7 @@ -import getMenuBySlug from "menus-collection/controller/data/read"; +import getMenuBySlug from "@discontent/menus-collection/controller/data/read"; import EditForm from "./form"; -import deleteMenu from "menus-collection/controller/actions/delete"; -import { SubmitButton } from "component-library/components/SubmitButton"; +import deleteMenu from "@discontent/menus-collection/controller/actions/delete"; +import { SubmitButton } from "@discontent/component-library/components/SubmitButton"; import { auth, signIn } from "@/auth"; import { PageMain, diff --git a/websites/recipe-website/editor/src/app/(editor)/(pages)/[...slug]/page.tsx b/websites/recipe-website/editor/src/app/(editor)/(pages)/[...slug]/page.tsx index e63314d8..e5020237 100644 --- a/websites/recipe-website/editor/src/app/(editor)/(pages)/[...slug]/page.tsx +++ b/websites/recipe-website/editor/src/app/(editor)/(pages)/[...slug]/page.tsx @@ -1,7 +1,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; -import getPageBySlug from "pages-collection/controller/data/read"; -import deletePage from "pages-collection/controller/actions/delete"; +import getPageBySlug from "@discontent/pages-collection/controller/data/read"; +import deletePage from "@discontent/pages-collection/controller/actions/delete"; import RenderedPage from "recipe-website-common/components/RenderedPage"; export async function generateMetadata({ diff --git a/websites/recipe-website/editor/src/app/(editor)/(pages)/pages/edit/[...slug]/form.tsx b/websites/recipe-website/editor/src/app/(editor)/(pages)/pages/edit/[...slug]/form.tsx index 0b521c4e..f2f1475f 100644 --- a/websites/recipe-website/editor/src/app/(editor)/(pages)/pages/edit/[...slug]/form.tsx +++ b/websites/recipe-website/editor/src/app/(editor)/(pages)/pages/edit/[...slug]/form.tsx @@ -1,10 +1,10 @@ "use client"; -import UpdatePageFields from "pages-collection/components/Form/Update"; -import { SubmitButton } from "component-library/components/SubmitButton"; -import { Page } from "pages-collection/controller/types"; -import { PageFormState } from "pages-collection/controller/formState"; -import updatePage from "pages-collection/controller/actions/update"; +import UpdatePageFields from "@discontent/pages-collection/components/Form/Update"; +import { SubmitButton } from "@discontent/component-library/components/SubmitButton"; +import { Page } from "@discontent/pages-collection/controller/types"; +import { PageFormState } from "@discontent/pages-collection/controller/formState"; +import updatePage from "@discontent/pages-collection/controller/actions/update"; import Link from "next/link"; import { useActionState } from "react"; diff --git a/websites/recipe-website/editor/src/app/(editor)/(pages)/pages/edit/[...slug]/page.tsx b/websites/recipe-website/editor/src/app/(editor)/(pages)/pages/edit/[...slug]/page.tsx index df7a6e6d..c34254e0 100644 --- a/websites/recipe-website/editor/src/app/(editor)/(pages)/pages/edit/[...slug]/page.tsx +++ b/websites/recipe-website/editor/src/app/(editor)/(pages)/pages/edit/[...slug]/page.tsx @@ -1,4 +1,4 @@ -import getPageBySlug from "pages-collection/controller/data/read"; +import getPageBySlug from "@discontent/pages-collection/controller/data/read"; import EditForm from "./form"; import { notFound } from "next/navigation"; import { auth, signIn } from "@/auth"; diff --git a/websites/recipe-website/editor/src/app/(editor)/(pages)/pages/new/form.tsx b/websites/recipe-website/editor/src/app/(editor)/(pages)/pages/new/form.tsx index 39322825..64bc5362 100644 --- a/websites/recipe-website/editor/src/app/(editor)/(pages)/pages/new/form.tsx +++ b/websites/recipe-website/editor/src/app/(editor)/(pages)/pages/new/form.tsx @@ -1,10 +1,10 @@ "use client"; -import CreatePageFields from "pages-collection/components/Form/Create"; +import CreatePageFields from "@discontent/pages-collection/components/Form/Create"; import { useActionState } from "react"; -import { Button } from "component-library/components/Button"; -import { PageFormState } from "pages-collection/controller/formState"; -import createPage from "pages-collection/controller/actions/create"; +import { Button } from "@discontent/component-library/components/Button"; +import { PageFormState } from "@discontent/pages-collection/controller/formState"; +import createPage from "@discontent/pages-collection/controller/actions/create"; import Link from "next/link"; export default function NewPageForm() { diff --git a/websites/recipe-website/editor/src/app/(editor)/(pages)/pages/page.tsx b/websites/recipe-website/editor/src/app/(editor)/(pages)/pages/page.tsx index 9c141ea8..71406a41 100644 --- a/websites/recipe-website/editor/src/app/(editor)/(pages)/pages/page.tsx +++ b/websites/recipe-website/editor/src/app/(editor)/(pages)/pages/page.tsx @@ -1,6 +1,6 @@ import getPages, { MassagedPageEntry, -} from "pages-collection/controller/data/readIndex"; +} from "@discontent/pages-collection/controller/data/readIndex"; import Link from "next/link"; import { auth, signIn } from "@/auth"; import { diff --git a/websites/recipe-website/editor/src/app/(editor)/export/exportAction.ts b/websites/recipe-website/editor/src/app/(editor)/export/exportAction.ts index c30bfbac..25ece553 100644 --- a/websites/recipe-website/editor/src/app/(editor)/export/exportAction.ts +++ b/websites/recipe-website/editor/src/app/(editor)/export/exportAction.ts @@ -1,7 +1,7 @@ "use server"; import { commandAction } from "@/app/(recipes)/scriptAction"; -import { getContentDirectory } from "content-engine/fs/getContentDirectory"; +import { getContentDirectory } from "@discontent/cms/fs/getContentDirectory"; import { ensureSymlink } from "fs-extra"; import { resolve } from "path"; diff --git a/websites/recipe-website/editor/src/app/(editor)/export/exporter.tsx b/websites/recipe-website/editor/src/app/(editor)/export/exporter.tsx index 39c5194f..21eec6a3 100644 --- a/websites/recipe-website/editor/src/app/(editor)/export/exporter.tsx +++ b/websites/recipe-website/editor/src/app/(editor)/export/exporter.tsx @@ -4,7 +4,7 @@ import { commandAction, StreamActionResult, } from "@/app/(recipes)/scriptAction"; -import { SubmitButton } from "component-library/components/SubmitButton"; +import { SubmitButton } from "@discontent/component-library/components/SubmitButton"; import { ReactNode, useCallback, useState } from "react"; import { buildExport } from "./exportAction"; diff --git a/websites/recipe-website/editor/src/app/(editor)/git/BranchSelector.tsx b/websites/recipe-website/editor/src/app/(editor)/git/BranchSelector.tsx index accb5c62..030e8621 100644 --- a/websites/recipe-website/editor/src/app/(editor)/git/BranchSelector.tsx +++ b/websites/recipe-website/editor/src/app/(editor)/git/BranchSelector.tsx @@ -1,7 +1,7 @@ "use client"; import { useActionState, useState } from "react"; -import { SubmitButton } from "component-library/components/SubmitButton"; +import { SubmitButton } from "@discontent/component-library/components/SubmitButton"; import { branchCommandAction } from "../../../../controller/actions"; import clsx from "clsx"; import { BranchSummaryBranch } from "simple-git"; diff --git a/websites/recipe-website/editor/src/app/(editor)/git/CreateBranchForm.tsx b/websites/recipe-website/editor/src/app/(editor)/git/CreateBranchForm.tsx index 05a1cecd..d612dbc9 100644 --- a/websites/recipe-website/editor/src/app/(editor)/git/CreateBranchForm.tsx +++ b/websites/recipe-website/editor/src/app/(editor)/git/CreateBranchForm.tsx @@ -1,9 +1,9 @@ "use client"; -import { TextInput } from "component-library/components/Form/inputs/Text"; +import { TextInput } from "@discontent/component-library/components/Form/inputs/Text"; import { useActionState } from "react"; import { createBranch } from "../../../../controller/actions"; -import { SubmitButton } from "component-library/components/SubmitButton"; +import { SubmitButton } from "@discontent/component-library/components/SubmitButton"; const CREATE_BRANCH_BUTTON_TEXT = "Create"; const BRANCH_SELECTOR_LABEL = "Branch Name"; diff --git a/websites/recipe-website/editor/src/app/(editor)/git/CreateRemoteForm.tsx b/websites/recipe-website/editor/src/app/(editor)/git/CreateRemoteForm.tsx index a74e940d..a29d5e01 100644 --- a/websites/recipe-website/editor/src/app/(editor)/git/CreateRemoteForm.tsx +++ b/websites/recipe-website/editor/src/app/(editor)/git/CreateRemoteForm.tsx @@ -1,9 +1,9 @@ "use client"; -import { TextInput } from "component-library/components/Form/inputs/Text"; +import { TextInput } from "@discontent/component-library/components/Form/inputs/Text"; import { useActionState } from "react"; import { createRemote } from "../../../../controller/actions"; -import { SubmitButton } from "component-library/components/SubmitButton"; +import { SubmitButton } from "@discontent/component-library/components/SubmitButton"; const CREATE_REMOTE_BUTTON_TEXT = "Add"; const REMOTE_NAME_LABEL = "Remote Name"; diff --git a/websites/recipe-website/editor/src/app/(editor)/git/RemoteSelector.tsx b/websites/recipe-website/editor/src/app/(editor)/git/RemoteSelector.tsx index ad2b1c9b..3182a524 100644 --- a/websites/recipe-website/editor/src/app/(editor)/git/RemoteSelector.tsx +++ b/websites/recipe-website/editor/src/app/(editor)/git/RemoteSelector.tsx @@ -1,7 +1,7 @@ "use client"; import { useActionState } from "react"; -import { SubmitButton } from "component-library/components/SubmitButton"; +import { SubmitButton } from "@discontent/component-library/components/SubmitButton"; import { remoteCommandAction } from "../../../../controller/actions"; import { RemoteWithRefs } from "simple-git"; diff --git a/websites/recipe-website/editor/src/app/(editor)/git/ui.tsx b/websites/recipe-website/editor/src/app/(editor)/git/ui.tsx index f39cb285..eac090d8 100644 --- a/websites/recipe-website/editor/src/app/(editor)/git/ui.tsx +++ b/websites/recipe-website/editor/src/app/(editor)/git/ui.tsx @@ -1,6 +1,6 @@ import simpleGit from "simple-git"; -import { directoryIsGitRepo } from "content-engine/git/commit"; -import { SubmitButton } from "component-library/components/SubmitButton"; +import { directoryIsGitRepo } from "@discontent/cms/git/commit"; +import { SubmitButton } from "@discontent/component-library/components/SubmitButton"; import { BranchSelector } from "./BranchSelector"; import { CreateBranchForm } from "./CreateBranchForm"; import { GitLog } from "./GitLog"; @@ -8,7 +8,7 @@ import { RemoteSelector } from "./RemoteSelector"; import { CreateRemoteForm } from "./CreateRemoteForm"; import { initializeContentGit } from "../../../../controller/actions"; import { EntryWithDiff, GitInfo } from "./types"; -import { getContentDirectory } from "content-engine/fs/getContentDirectory"; +import { getContentDirectory } from "@discontent/cms/fs/getContentDirectory"; import { PageMain, PageSection, diff --git a/websites/recipe-website/editor/src/app/(editor)/settings/SettingsForm.tsx b/websites/recipe-website/editor/src/app/(editor)/settings/SettingsForm.tsx index 2242a408..28c7f223 100644 --- a/websites/recipe-website/editor/src/app/(editor)/settings/SettingsForm.tsx +++ b/websites/recipe-website/editor/src/app/(editor)/settings/SettingsForm.tsx @@ -1,7 +1,7 @@ "use client"; -import { TextInput } from "component-library/components/Form/inputs/Text"; -import { SubmitButton } from "component-library/components/SubmitButton"; +import { TextInput } from "@discontent/component-library/components/Form/inputs/Text"; +import { SubmitButton } from "@discontent/component-library/components/SubmitButton"; import { useActionState } from "react"; import { updateSettings } from "./actions"; import { Settings } from "@/settings"; diff --git a/websites/recipe-website/editor/src/app/(editor)/settings/page.tsx b/websites/recipe-website/editor/src/app/(editor)/settings/page.tsx index 26c03b34..82688ba4 100644 --- a/websites/recipe-website/editor/src/app/(editor)/settings/page.tsx +++ b/websites/recipe-website/editor/src/app/(editor)/settings/page.tsx @@ -2,7 +2,7 @@ import { rebuildRecipeIndex } from "recipe-editor/controller/actions"; import { rebuildFeaturedRecipeIndex } from "recipe-editor/controller/actions/featuredRecipes"; import { auth, signIn } from "@/auth"; import { readSettings } from "@/settings"; -import { SubmitButton } from "component-library/components/SubmitButton"; +import { SubmitButton } from "@discontent/component-library/components/SubmitButton"; import { PageMain, PageSection, diff --git a/websites/recipe-website/editor/src/app/(recipes)/featured-recipe/[slug]/edit/form.tsx b/websites/recipe-website/editor/src/app/(recipes)/featured-recipe/[slug]/edit/form.tsx index 94c52c6d..c8521aa6 100644 --- a/websites/recipe-website/editor/src/app/(recipes)/featured-recipe/[slug]/edit/form.tsx +++ b/websites/recipe-website/editor/src/app/(recipes)/featured-recipe/[slug]/edit/form.tsx @@ -2,7 +2,7 @@ import CreateFeaturedRecipeFields from "recipe-website-common/components/Form/FeaturedRecipe/Create"; import { useActionState } from "react"; -import { SubmitButton } from "component-library/components/SubmitButton"; +import { SubmitButton } from "@discontent/component-library/components/SubmitButton"; import { FeaturedRecipeFormState } from "recipe-website-common/controller/featuredRecipeFormState"; import { updateFeaturedRecipe } from "recipe-editor/controller/actions/featuredRecipes"; import { FeaturedRecipe } from "recipe-website-common/controller/types"; diff --git a/websites/recipe-website/editor/src/app/(recipes)/featured-recipe/[slug]/page.tsx b/websites/recipe-website/editor/src/app/(recipes)/featured-recipe/[slug]/page.tsx index f4c91e7a..90505414 100644 --- a/websites/recipe-website/editor/src/app/(recipes)/featured-recipe/[slug]/page.tsx +++ b/websites/recipe-website/editor/src/app/(recipes)/featured-recipe/[slug]/page.tsx @@ -3,7 +3,10 @@ import { notFound } from "next/navigation"; import { getFeaturedRecipeBySlug } from "recipe-website-common/controller/data/readFeaturedRecipes"; import { getRecipeBySlug } from "recipe-website-common/controller/data/read"; import { deleteFeaturedRecipe } from "../../../../../controller/actions/featuredRecipes"; -import { Button, buttonVariants } from "component-library/components/ui/button"; +import { + Button, + buttonVariants, +} from "@discontent/component-library/components/ui/button"; import FeaturedRecipeDetailPage from "recipe-website-common/components/FeaturedRecipeDetailPage"; export const dynamic = "force-dynamic"; diff --git a/websites/recipe-website/editor/src/app/(recipes)/featured-recipe/new/form.tsx b/websites/recipe-website/editor/src/app/(recipes)/featured-recipe/new/form.tsx index bb2f58bb..c72562c2 100644 --- a/websites/recipe-website/editor/src/app/(recipes)/featured-recipe/new/form.tsx +++ b/websites/recipe-website/editor/src/app/(recipes)/featured-recipe/new/form.tsx @@ -2,7 +2,7 @@ import CreateFeaturedRecipeFields from "recipe-website-common/components/Form/FeaturedRecipe/Create"; import { useActionState } from "react"; -import { SubmitButton } from "component-library/components/SubmitButton"; +import { SubmitButton } from "@discontent/component-library/components/SubmitButton"; import { FeaturedRecipeFormState } from "recipe-website-common/controller/featuredRecipeFormState"; import { createFeaturedRecipe } from "recipe-editor/controller/actions/featuredRecipes"; diff --git a/websites/recipe-website/editor/src/app/(recipes)/new-recipe/form.tsx b/websites/recipe-website/editor/src/app/(recipes)/new-recipe/form.tsx index 06b13fc6..2ae171e5 100644 --- a/websites/recipe-website/editor/src/app/(recipes)/new-recipe/form.tsx +++ b/websites/recipe-website/editor/src/app/(recipes)/new-recipe/form.tsx @@ -2,14 +2,14 @@ import CreateRecipeFields from "recipe-website-common/components/Form/Create"; import { useActionState } from "react"; -import { SubmitButton } from "component-library/components/SubmitButton"; +import { SubmitButton } from "@discontent/component-library/components/SubmitButton"; import { RecipeFormState } from "recipe-website-common/controller/formState"; import { createRecipe, overwriteRecipe, } from "recipe-editor/controller/actions"; import { importRecipeAction } from "./actions"; -import { TextInput } from "component-library/components/Form/inputs/Text"; +import { TextInput } from "@discontent/component-library/components/Form/inputs/Text"; import { RecipeActionState } from "./common"; export default function NewOrImportRecipeForm({ diff --git a/websites/recipe-website/editor/src/app/(recipes)/recipe/[slug]/copy/form.tsx b/websites/recipe-website/editor/src/app/(recipes)/recipe/[slug]/copy/form.tsx index 90da623e..c8bdd80d 100644 --- a/websites/recipe-website/editor/src/app/(recipes)/recipe/[slug]/copy/form.tsx +++ b/websites/recipe-website/editor/src/app/(recipes)/recipe/[slug]/copy/form.tsx @@ -2,7 +2,7 @@ import UpdateRecipeFields from "recipe-website-common/components/Form/Update"; import { useActionState } from "react"; -import { SubmitButton } from "component-library/components/SubmitButton"; +import { SubmitButton } from "@discontent/component-library/components/SubmitButton"; import { Recipe } from "recipe-website-common/controller/types"; import { RecipeFormState } from "recipe-website-common/controller/formState"; import { createRecipe } from "recipe-editor/controller/actions"; diff --git a/websites/recipe-website/editor/src/app/(recipes)/recipe/[slug]/edit/form.tsx b/websites/recipe-website/editor/src/app/(recipes)/recipe/[slug]/edit/form.tsx index 5d26d0c9..5592efa7 100644 --- a/websites/recipe-website/editor/src/app/(recipes)/recipe/[slug]/edit/form.tsx +++ b/websites/recipe-website/editor/src/app/(recipes)/recipe/[slug]/edit/form.tsx @@ -2,10 +2,10 @@ import UpdateRecipeFields from "recipe-website-common/components/Form/Update"; import { useActionState } from "react"; -import { SubmitButton } from "component-library/components/SubmitButton"; +import { SubmitButton } from "@discontent/component-library/components/SubmitButton"; import { Recipe } from "recipe-website-common/controller/types"; import { RecipeFormState } from "recipe-website-common/controller/formState"; -import { StaticImageProps } from "next-static-image/src"; +import { StaticImageProps } from "@discontent/next-static-image/src"; import { updateRecipe, overwriteUpdateRecipe, diff --git a/websites/recipe-website/editor/src/app/(recipes)/recipe/[slug]/page.tsx b/websites/recipe-website/editor/src/app/(recipes)/recipe/[slug]/page.tsx index 573a195c..eb2b030a 100644 --- a/websites/recipe-website/editor/src/app/(recipes)/recipe/[slug]/page.tsx +++ b/websites/recipe-website/editor/src/app/(recipes)/recipe/[slug]/page.tsx @@ -3,7 +3,10 @@ import { notFound } from "next/navigation"; import { getRecipeBySlug } from "recipe-website-common/controller/data/read"; import { RecipeView } from "recipe-website-common/components/View"; import { deleteRecipe } from "../../../../../controller/actions"; -import { Button, buttonVariants } from "component-library/components/ui/button"; +import { + Button, + buttonVariants, +} from "@discontent/component-library/components/ui/button"; import { PageMain, PageSection, diff --git a/websites/recipe-website/editor/src/app/(recipes)/scriptAction.ts b/websites/recipe-website/editor/src/app/(recipes)/scriptAction.ts index a74d2423..5b2e4e26 100644 --- a/websites/recipe-website/editor/src/app/(recipes)/scriptAction.ts +++ b/websites/recipe-website/editor/src/app/(recipes)/scriptAction.ts @@ -1,7 +1,7 @@ "use server"; import { execa } from "execa"; -import { getContentDirectory } from "content-engine/fs/getContentDirectory"; +import { getContentDirectory } from "@discontent/cms/fs/getContentDirectory"; import { unstable_noStore } from "next/cache"; import { auth, signIn } from "@/auth"; import { resolve } from "path"; diff --git a/websites/recipe-website/editor/src/app/(recipes)/uploads/recipe/[slug]/uploads/[filename]/route.ts b/websites/recipe-website/editor/src/app/(recipes)/uploads/recipe/[slug]/uploads/[filename]/route.ts index 28797eb9..a4e65ac5 100644 --- a/websites/recipe-website/editor/src/app/(recipes)/uploads/recipe/[slug]/uploads/[filename]/route.ts +++ b/websites/recipe-website/editor/src/app/(recipes)/uploads/recipe/[slug]/uploads/[filename]/route.ts @@ -3,7 +3,7 @@ import { ReadStream } from "fs"; import { open } from "fs/promises"; import { notFound } from "next/navigation"; import { NextRequest, NextResponse } from "next/server"; -import { getContentDirectory } from "content-engine/fs/getContentDirectory"; +import { getContentDirectory } from "@discontent/cms/fs/getContentDirectory"; export async function GET( _request: NextRequest, diff --git a/websites/recipe-website/editor/src/app/image/[...filePath]/route.ts b/websites/recipe-website/editor/src/app/image/[...filePath]/route.ts index d7844063..f549514a 100644 --- a/websites/recipe-website/editor/src/app/image/[...filePath]/route.ts +++ b/websites/recipe-website/editor/src/app/image/[...filePath]/route.ts @@ -1,4 +1,4 @@ -import { getContentDirectory } from "content-engine/fs/getContentDirectory"; +import { getContentDirectory } from "@discontent/cms/fs/getContentDirectory"; import { ReadStream } from "fs"; import { open } from "fs/promises"; import { notFound } from "next/navigation"; diff --git a/websites/recipe-website/editor/src/app/uploads/[filename]/route.ts b/websites/recipe-website/editor/src/app/uploads/[filename]/route.ts index e5425ff2..033757d6 100644 --- a/websites/recipe-website/editor/src/app/uploads/[filename]/route.ts +++ b/websites/recipe-website/editor/src/app/uploads/[filename]/route.ts @@ -1,4 +1,4 @@ -import { getContentDirectory } from "content-engine/fs/getContentDirectory"; +import { getContentDirectory } from "@discontent/cms/fs/getContentDirectory"; import { ReadStream } from "fs"; import { open } from "fs/promises"; import { notFound } from "next/navigation"; diff --git a/websites/recipe-website/editor/src/auth.ts b/websites/recipe-website/editor/src/auth.ts index de831295..5c151c7b 100644 --- a/websites/recipe-website/editor/src/auth.ts +++ b/websites/recipe-website/editor/src/auth.ts @@ -5,7 +5,7 @@ import { z } from "zod"; import { readJson } from "fs-extra"; import { resolve } from "path"; import bcrypt from "bcrypt"; -import { getContentDirectory } from "content-engine/fs/getContentDirectory"; +import { getContentDirectory } from "@discontent/cms/fs/getContentDirectory"; export interface User { email: string; diff --git a/websites/recipe-website/export/package.json b/websites/recipe-website/export/package.json index 11b9dffb..5775f9d5 100644 --- a/websites/recipe-website/export/package.json +++ b/websites/recipe-website/export/package.json @@ -20,8 +20,8 @@ "@sindresorhus/slugify": "^3.0.0", "@tanstack/react-query": "^5.90.20", "clsx": "^2.1.1", - "component-library": "^1.0.0", - "content-engine": "^1.0.0", + "@discontent/component-library": "^1.0.0", + "@discontent/cms": "^1.0.0", "date-fns": "^4.1.0", "flexsearch": "^0.8.212", "format-quantity": "^3.0.0", @@ -29,7 +29,7 @@ "lmdb": "^3.5.1", "lodash": "^4.17.23", "markdown-to-jsx": "^9.6.1", - "menus-collection": "^1.0.0", + "@discontent/menus-collection": "^1.0.0", "netlify-cli": "^23.14.0", "next": "16.1.6", "react": "19.2.4", diff --git a/websites/recipe-website/export/src/app/(recipes)/[...slug]/page.tsx b/websites/recipe-website/export/src/app/(recipes)/[...slug]/page.tsx index 3b65c5c0..4ad13ed6 100644 --- a/websites/recipe-website/export/src/app/(recipes)/[...slug]/page.tsx +++ b/websites/recipe-website/export/src/app/(recipes)/[...slug]/page.tsx @@ -1,6 +1,6 @@ import { notFound } from "next/navigation"; -import getPageBySlug from "pages-collection/controller/data/read"; -import getPages from "pages-collection/controller/data/readIndex"; +import getPageBySlug from "@discontent/pages-collection/controller/data/read"; +import getPages from "@discontent/pages-collection/controller/data/readIndex"; import RenderedPage from "recipe-website-common/components/RenderedPage"; export async function generateMetadata({ diff --git a/websites/recipe-website/export/src/app/(recipes)/recipes/[page]/page.tsx b/websites/recipe-website/export/src/app/(recipes)/recipes/[page]/page.tsx index 75b0677f..e06e20eb 100644 --- a/websites/recipe-website/export/src/app/(recipes)/recipes/[page]/page.tsx +++ b/websites/recipe-website/export/src/app/(recipes)/recipes/[page]/page.tsx @@ -23,7 +23,9 @@ export default async function Recipes({ limit: RECIPES_PER_PAGE, }); - return ; + return ( + + ); } export async function generateStaticParams() { diff --git a/websites/resume-builder/package.json b/websites/resume-builder/package.json index e0b8e67d..27c623bf 100644 --- a/websites/resume-builder/package.json +++ b/websites/resume-builder/package.json @@ -18,8 +18,8 @@ "dependencies": { "@tailwindcss/postcss": "^4.1.18", "cbor-x": "^1.6.0", - "component-library": "^1.0.0", - "content-engine": "^1.0.0", + "@discontent/component-library": "^1.0.0", + "@discontent/cms": "^1.0.0", "fs-extra": "^11.3.3", "lmdb": "^3.5.1", "next": "16.1.6", diff --git a/websites/resume-builder/src/app/(resumes)/new-resume/form.tsx b/websites/resume-builder/src/app/(resumes)/new-resume/form.tsx index 7a193e5e..14a691e9 100644 --- a/websites/resume-builder/src/app/(resumes)/new-resume/form.tsx +++ b/websites/resume-builder/src/app/(resumes)/new-resume/form.tsx @@ -1,7 +1,7 @@ "use client"; import { useActionState } from "react"; -import { SubmitButton } from "component-library/components/SubmitButton"; +import { SubmitButton } from "@discontent/component-library/components/SubmitButton"; import { Resume } from "@/controller/types"; import { ResumeFormState } from "@/controller/formState"; import createResume from "@/controller/actions/create"; diff --git a/websites/resume-builder/src/app/(resumes)/settings/page.tsx b/websites/resume-builder/src/app/(resumes)/settings/page.tsx index 85bec5c6..1f7f40a9 100644 --- a/websites/resume-builder/src/app/(resumes)/settings/page.tsx +++ b/websites/resume-builder/src/app/(resumes)/settings/page.tsx @@ -1,5 +1,5 @@ import rebuildResumeIndex from "@/controller/actions/rebuildIndex"; -import { SubmitButton } from "component-library/components/SubmitButton"; +import { SubmitButton } from "@discontent/component-library/components/SubmitButton"; export default async function SettingsPage() { return ( diff --git a/websites/resume-builder/src/components/Resume/Form/Create/index.tsx b/websites/resume-builder/src/components/Resume/Form/Create/index.tsx index d8d94642..b8f0eeef 100644 --- a/websites/resume-builder/src/components/Resume/Form/Create/index.tsx +++ b/websites/resume-builder/src/components/Resume/Form/Create/index.tsx @@ -8,10 +8,10 @@ import createDefaultSlug from "@/controller/createSlug"; import { ProjectsListInput } from "@/components/Resume/Form/Projects"; import { EducationListInput } from "@/components/Resume/Form/Education"; import { ExperienceListInput } from "@/components/Resume/Form/Experience"; -import { TextInput } from "component-library/components/Form/inputs/Text"; -import { TextListInput } from "component-library/components/Form/inputs/List"; -import { DateTimeInput } from "component-library/components/Form/inputs/DateTime"; -import { useCurrentTimezone } from "content-engine/hooks/useCurrentTimezone"; +import { TextInput } from "@discontent/component-library/components/Form/inputs/Text"; +import { TextListInput } from "@discontent/component-library/components/Form/inputs/List"; +import { DateTimeInput } from "@discontent/component-library/components/Form/inputs/DateTime"; +import { useCurrentTimezone } from "@discontent/cms/hooks/useCurrentTimezone"; export default function CreateResumeFields({ resume, diff --git a/websites/resume-builder/src/components/Resume/Form/Education/index.tsx b/websites/resume-builder/src/components/Resume/Form/Education/index.tsx index a505f852..54746fb5 100644 --- a/websites/resume-builder/src/components/Resume/Form/Education/index.tsx +++ b/websites/resume-builder/src/components/Resume/Form/Education/index.tsx @@ -4,9 +4,9 @@ import { Button } from "@/components/Button"; import { InputListControls, useKeyList, -} from "component-library/components/Form/inputs/List"; -import { FieldWrapper } from "component-library/components/Form"; -import { TextInput } from "component-library/components/Form/inputs/Text"; +} from "@discontent/component-library/components/Form/inputs/List"; +import { FieldWrapper } from "@discontent/component-library/components/Form"; +import { TextInput } from "@discontent/component-library/components/Form/inputs/Text"; export function EducationListInput({ name, diff --git a/websites/resume-builder/src/components/Resume/Form/Experience/index.tsx b/websites/resume-builder/src/components/Resume/Form/Experience/index.tsx index 8bcdb6ab..f2175604 100644 --- a/websites/resume-builder/src/components/Resume/Form/Experience/index.tsx +++ b/websites/resume-builder/src/components/Resume/Form/Experience/index.tsx @@ -4,10 +4,10 @@ import { Button } from "@/components/Button"; import { InputListControls, useKeyList, -} from "component-library/components/Form/inputs/List"; -import { FieldWrapper } from "component-library/components/Form"; -import { TextInput } from "component-library/components/Form/inputs/Text"; -import { MarkdownInput } from "component-library/components/Form/inputs/Markdown"; +} from "@discontent/component-library/components/Form/inputs/List"; +import { FieldWrapper } from "@discontent/component-library/components/Form"; +import { TextInput } from "@discontent/component-library/components/Form/inputs/Text"; +import { MarkdownInput } from "@discontent/component-library/components/Form/inputs/Markdown"; export function ExperienceListInput({ name, diff --git a/websites/resume-builder/src/components/Resume/Form/Projects/index.tsx b/websites/resume-builder/src/components/Resume/Form/Projects/index.tsx index 7db0fe31..2c67e431 100644 --- a/websites/resume-builder/src/components/Resume/Form/Projects/index.tsx +++ b/websites/resume-builder/src/components/Resume/Form/Projects/index.tsx @@ -1,14 +1,14 @@ import { ResumeFormErrors } from "@/controller/formState"; import { Project } from "@/controller/types"; import { Button } from "@/components/Button"; -import { FieldWrapper } from "component-library/components/Form"; +import { FieldWrapper } from "@discontent/component-library/components/Form"; import { InputListControls, TextListInput, useKeyList, -} from "component-library/components/Form/inputs/List"; -import { TextInput } from "component-library/components/Form/inputs/Text"; -import { MarkdownInput } from "component-library/components/Form/inputs/Markdown"; +} from "@discontent/component-library/components/Form/inputs/List"; +import { TextInput } from "@discontent/component-library/components/Form/inputs/Text"; +import { MarkdownInput } from "@discontent/component-library/components/Form/inputs/Markdown"; export function ProjectsListInput({ name, diff --git a/websites/resume-builder/src/components/Resume/Form/Update/index.tsx b/websites/resume-builder/src/components/Resume/Form/Update/index.tsx index 43525d89..4e386dce 100644 --- a/websites/resume-builder/src/components/Resume/Form/Update/index.tsx +++ b/websites/resume-builder/src/components/Resume/Form/Update/index.tsx @@ -8,10 +8,10 @@ import createDefaultSlug from "@/controller/createSlug"; import { ProjectsListInput } from "@/components/Resume/Form/Projects"; import { EducationListInput } from "@/components/Resume/Form/Education"; import { ExperienceListInput } from "@/components/Resume/Form/Experience"; -import { TextInput } from "component-library/components/Form/inputs/Text"; -import { TextListInput } from "component-library/components/Form/inputs/List"; -import { DateTimeInput } from "component-library/components/Form/inputs/DateTime"; -import { useCurrentTimezone } from "content-engine/hooks/useCurrentTimezone"; +import { TextInput } from "@discontent/component-library/components/Form/inputs/Text"; +import { TextListInput } from "@discontent/component-library/components/Form/inputs/List"; +import { DateTimeInput } from "@discontent/component-library/components/Form/inputs/DateTime"; +import { useCurrentTimezone } from "@discontent/cms/hooks/useCurrentTimezone"; export default function UpdateResumeFields({ resume, diff --git a/websites/resume-builder/src/components/Resume/View/index.tsx b/websites/resume-builder/src/components/Resume/View/index.tsx index a3177780..89a7dd46 100644 --- a/websites/resume-builder/src/components/Resume/View/index.tsx +++ b/websites/resume-builder/src/components/Resume/View/index.tsx @@ -3,7 +3,7 @@ import GithubIconSVG from "../../../images/github-mark.inline.svg"; import LinkedinIconSVG from "../../../images/linkedin.inline.svg"; import Image from "next/image"; import { Education, Experience, Project, Resume } from "@/controller/types"; -import Markdown from "component-library/components/Markdown"; +import Markdown from "@discontent/component-library/components/Markdown"; import Link from "next/link"; function GithubIcon() { diff --git a/websites/resume-builder/src/controller/actions/create.ts b/websites/resume-builder/src/controller/actions/create.ts index 6d90e740..af026a30 100644 --- a/websites/resume-builder/src/controller/actions/create.ts +++ b/websites/resume-builder/src/controller/actions/create.ts @@ -7,7 +7,7 @@ import { redirect } from "next/navigation"; import { ResumeFormState } from "../formState"; import type { Resume } from "../types"; import { resumeContentConfig } from "../resumeContentConfig"; -import { createContent } from "content-engine/content/createContent"; +import { createContent } from "@discontent/cms/content/createContent"; import z from "zod"; export default async function createResume( @@ -26,8 +26,7 @@ export default async function createResume( const { date: givenDate, slug: givenSlug, ...rest } = validatedFields.data; const date: number = givenDate || Date.now(); const slug = slugify( - givenSlug || - resumeContentConfig.createDefaultSlug!({ ...rest, date }) + givenSlug || resumeContentConfig.createDefaultSlug!({ ...rest, date }), ); const data: Resume = { ...rest, date }; diff --git a/websites/resume-builder/src/controller/actions/delete.ts b/websites/resume-builder/src/controller/actions/delete.ts index fd6d805b..973be461 100644 --- a/websites/resume-builder/src/controller/actions/delete.ts +++ b/websites/resume-builder/src/controller/actions/delete.ts @@ -3,7 +3,7 @@ import { revalidatePath } from "next/cache"; import { redirect } from "next/navigation"; import { resumeContentConfig } from "../resumeContentConfig"; -import { deleteContent } from "content-engine/content/deleteContent"; +import { deleteContent } from "@discontent/cms/content/deleteContent"; import type { ResumeEntryKey } from "../types"; export default async function deleteResume(date: number, slug: string) { diff --git a/websites/resume-builder/src/controller/actions/rebuildIndex.ts b/websites/resume-builder/src/controller/actions/rebuildIndex.ts index ae7e6d69..1302426b 100644 --- a/websites/resume-builder/src/controller/actions/rebuildIndex.ts +++ b/websites/resume-builder/src/controller/actions/rebuildIndex.ts @@ -2,7 +2,7 @@ import { revalidatePath } from "next/cache"; import { resumeContentConfig } from "../resumeContentConfig"; -import { rebuildIndex } from "content-engine/content/rebuildIndex"; +import { rebuildIndex } from "@discontent/cms/content/rebuildIndex"; export default async function rebuildResumeIndex() { await rebuildIndex({ config: resumeContentConfig }); diff --git a/websites/resume-builder/src/controller/actions/update.ts b/websites/resume-builder/src/controller/actions/update.ts index dab50222..cf6a09f3 100644 --- a/websites/resume-builder/src/controller/actions/update.ts +++ b/websites/resume-builder/src/controller/actions/update.ts @@ -6,7 +6,7 @@ import parseResumeFormData from "../parseFormData"; import { ResumeFormState } from "../formState"; import type { Resume, ResumeEntryKey } from "../types"; import { resumeContentConfig } from "../resumeContentConfig"; -import { updateContent } from "content-engine/content/updateContent"; +import { updateContent } from "@discontent/cms/content/updateContent"; import z from "zod"; export default async function updateResume( @@ -26,7 +26,12 @@ export default async function updateResume( const { date, slug, ...rest } = validatedFields.data; - const finalSlug = slug || resumeContentConfig.createDefaultSlug!({ ...rest, date: date || currentDate }); + const finalSlug = + slug || + resumeContentConfig.createDefaultSlug!({ + ...rest, + date: date || currentDate, + }); const finalDate = date || currentDate; const currentIndexKey: ResumeEntryKey = [currentDate, currentSlug]; diff --git a/websites/resume-builder/src/controller/data/read.ts b/websites/resume-builder/src/controller/data/read.ts index 904e7df7..e88cb128 100644 --- a/websites/resume-builder/src/controller/data/read.ts +++ b/websites/resume-builder/src/controller/data/read.ts @@ -1,4 +1,4 @@ -import { readContentFile } from "content-engine/content/readContentFile"; +import { readContentFile } from "@discontent/cms/content/readContentFile"; import { resumeContentConfig } from "../resumeContentConfig"; import type { Resume, ResumeEntryKey, ResumeEntryValue } from "../types"; diff --git a/websites/resume-builder/src/controller/data/readIndex.ts b/websites/resume-builder/src/controller/data/readIndex.ts index 6e3c5fa7..7ab4bae6 100644 --- a/websites/resume-builder/src/controller/data/readIndex.ts +++ b/websites/resume-builder/src/controller/data/readIndex.ts @@ -1,4 +1,4 @@ -import { readContentIndex } from "content-engine/content/readContentIndex"; +import { readContentIndex } from "@discontent/cms/content/readContentIndex"; import { resumeContentConfig } from "../resumeContentConfig"; import type { ResumeEntry, ResumeEntryKey, ResumeEntryValue } from "../types"; diff --git a/websites/resume-builder/src/controller/parseFormData.ts b/websites/resume-builder/src/controller/parseFormData.ts index ab228005..c5321ed2 100644 --- a/websites/resume-builder/src/controller/parseFormData.ts +++ b/websites/resume-builder/src/controller/parseFormData.ts @@ -1,6 +1,6 @@ import { ZodSafeParseResult, z } from "zod"; -import parseFormData from "content-engine/forms/parseFormData"; -import dateEpochSchema from "content-engine/forms/schema/dateEpoch"; +import parseFormData from "@discontent/cms/forms/parseFormData"; +import dateEpochSchema from "@discontent/cms/forms/schema/dateEpoch"; const ResumeFormSchema = z.object({ company: z.string().min(1), diff --git a/websites/resume-builder/src/controller/resumeContentConfig.ts b/websites/resume-builder/src/controller/resumeContentConfig.ts index d0ea30d1..e3800a7e 100644 --- a/websites/resume-builder/src/controller/resumeContentConfig.ts +++ b/websites/resume-builder/src/controller/resumeContentConfig.ts @@ -1,4 +1,4 @@ -import type { ContentTypeConfig } from "content-engine/content/types"; +import type { ContentTypeConfig } from "@discontent/cms/content/types"; import type { Resume, ResumeEntryKey, ResumeEntryValue } from "./types"; import buildResumeIndexValue from "./buildIndexValue"; import createDefaultSlug from "./createSlug"; @@ -13,7 +13,10 @@ export const resumeContentConfig: ContentTypeConfig< indexDirectory: "resumes/index", dataFilename: "resume.json", buildIndexValue: buildResumeIndexValue, - buildIndexKey: (slug: string, data: Resume): ResumeEntryKey => [data.date, slug], + buildIndexKey: (slug: string, data: Resume): ResumeEntryKey => [ + data.date, + slug, + ], createDefaultSlug: (data: Resume) => createDefaultSlug({ company: data.company, job: data.job }), }; diff --git a/websites/resume-builder/tsconfig.json b/websites/resume-builder/tsconfig.json index 50eac54d..82b3673d 100644 --- a/websites/resume-builder/tsconfig.json +++ b/websites/resume-builder/tsconfig.json @@ -1,11 +1,7 @@ { "compilerOptions": { "target": "ES2017", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], + "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, "strict": true, @@ -23,9 +19,7 @@ } ], "paths": { - "@/*": [ - "./src/*" - ] + "@/*": ["./src/*"] } }, "include": [ @@ -35,8 +29,5 @@ ".next/types/**/*.ts", ".next/dev/types/**/*.ts" ], - "exclude": [ - "node_modules", - "cypress" - ] + "exclude": ["node_modules", "cypress"] } From d390f2e784fb8bc143da4db24ffa172c8c6d854c Mon Sep 17 00:00:00 2001 From: rogermparent Date: Sun, 22 Mar 2026 21:46:10 -0400 Subject: [PATCH 2/2] Remove README docs for unsupported tests --- README.md | 65 +------------------------------------------------------ 1 file changed, 1 insertion(+), 64 deletions(-) diff --git a/README.md b/README.md index 7f5419e5..dd36b9fd 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ This monorepo hosts a group of packages that establish and re-use patterns to cr The projects in [`packages`](packages) are libraries that could be published as reusable packages, and the ones in [`websites`](websites) are examples of concrete implementations using those packages. -Generally, a website made with these packages will span two projects: an editor and a website. The editor is a dynamic app that has serves as a custom-built CMS, and that CMS calls the website project to build a deployable static website with that content. Having this editor/website pattern combines the accessibility of a dynamic graphical CMS with the effortless hosting of a static website. +Generally, a website made with these packages will span two projects: the editor and the export. The editor is a dynamic app that has serves as a custom-built CMS, and that CMS calls the export project to build a static website with that content. Having this editor/website pattern combines the accessibility of a dynamic graphical CMS with the effortless hosting of a static website. Reusable packages in this repo aim to be composable, allowing any implementation full control over the process of creating content. For example, a website can check in with any authentication service that's compatible with NextJS before calling the functions from `@discontent/cms` to persist content to LMDB and the filesystem. @@ -14,15 +14,6 @@ The [Recipe Website](websites/recipe-website) project is the most complete imple # Running tests -## Unit Tests (Vitest) - -This command builds a docker image with the code of this repository and runs the repository's unit tests: - -```sh -./build_docker.sh content-engine -docker run -t content-engine ./run_tests.sh -``` - ## E2E Tests (Cypress) End-to-end tests are available for the recipe editor. To run them: @@ -38,57 +29,3 @@ pnpm e2e-dev:headless ``` See [cypress/README.md](websites/recipe-website/editor/cypress/README.md) for more details about the e2e test suite. - -``` -[+] Building 0.1s (10/10) FINISHED docker:default - => [internal] load build definition from Dockerfile 0.0s - => => transferring dockerfile: 226B 0.0s - => [internal] load metadata for docker.io/library/node:22.14.0-alpine3.21@sha256:9bef0ef1e268f60627da9ba7d76 0.0s - => [internal] load .dockerignore 0.0s - => => transferring context: 154B 0.0s - => [1/5] FROM docker.io/library/node:22.14.0-alpine3.21@sha256:9bef0ef1e268f60627da9ba7d7605e8831d5b56ad0748 0.0s - => [internal] load build context 0.0s - => => transferring context: 1.07kB 0.0s - => CACHED [2/5] WORKDIR /app 0.0s - => CACHED [3/5] COPY package.json package-lock.json . 0.0s - => CACHED [4/5] RUN npm install 0.0s - => CACHED [5/5] COPY . . 0.0s - => exporting to image 0.0s - => => exporting layers 0.0s - => => writing image sha256:80007dbaeba9813527f4a4e663e6d773256f6e42f1b3c3fdf713fe45b4897c2f 0.0s - => => naming to docker.io/library/content-engine 0.0s - - -> my-react-app@0.0.0 test -> vitest - - - RUN v3.1.1 /app - - ✓ src/App.test.jsx (2 tests) 176ms - ✓ test/basic.test.js (3 tests) 6ms - ✓ test/suite.test.js (3 tests) 7ms - - Test Files 3 passed (3) - Tests 8 passed (8) - Start at 22:08:27 - Duration 3.74s (transform 93ms, setup 361ms, collect 282ms, tests 190ms, environment 1.95s, prepare 392ms) -``` - -# Running a specific test - -This example runs all tests matching the name "basic": - -```sh -./build_docker.sh content-engine -docker run -t content-engine ./run_tests.sh basic -``` - -# Running a vite dev server - -Run this command to enable hot reloading via docker. - -```sh -./build_docker.sh content-engine -docker run --network=host -v .:/app -it content-engine npm exec vite dev --host -```