@opinly/next 0.1.24 → 0.1.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/blog-post/index.cjs +0 -1
- package/dist/components/blog-post/index.cjs.map +1 -1
- package/dist/components/blog-post/index.js +0 -1
- package/dist/components/blog-post/index.js.map +1 -1
- package/dist/components/opinly-blog.cjs +11 -13
- package/dist/components/opinly-blog.cjs.map +1 -1
- package/dist/components/opinly-blog.d.cts +3 -4
- package/dist/components/opinly-blog.d.ts +3 -4
- package/dist/components/opinly-blog.js +11 -13
- package/dist/components/opinly-blog.js.map +1 -1
- package/dist/utils/generate-metadata.cjs +47 -0
- package/dist/utils/generate-metadata.cjs.map +1 -1
- package/dist/utils/generate-metadata.js +47 -0
- package/dist/utils/generate-metadata.js.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/blog-post/index.tsx"],"sourcesContent":["import React from \"react\";\nimport { JSONContent } from \"@tiptap/core\";\nimport Link from \"next/link\";\nimport { cn } from \"../../utils/merge\";\nimport { opinlyConfig } from \"../../utils/sdk-config\";\nimport { BlogPostRes } from \"./_types/blog-post\";\nimport { genBlogPostingJSONLD, genFaqJSONLD } from \"./_helpers/json-ld\";\nimport { BlogComponentClassNames } from \"./_types/class-names\";\nimport { FAQS } from \"./_components/faq\";\nimport { calculateReadingTime } from \"./_helpers/reading-time\";\nimport { Content } from \"./_components/content\";\nimport { TableOfContents } from \"./_components/table-of-contents\";\nimport { BreadCrumbs } from \"../bread-crumbs\";\nimport { formatDate } from \"../../utils/dates\";\nimport Script from \"next/script\";\nimport { OpinlyBreadCrumbJsonLd, OpinlyJSONLD } from \"../json-ld\";\n\nexport type BlogPostProps = {\n cta?: React.ReactNode;\n};\n\nexport const BlogPost = ({\n post,\n classNames = {},\n cta,\n}: {\n post: BlogPostRes;\n classNames?: BlogComponentClassNames;\n} & BlogPostProps) => {\n const content = post.content as JSONContent;\n\n const breadcrumbItems = [];\n\n if (post.folder) {\n breadcrumbItems.push({\n slugNoPrefixSlash: post.folder.slug,\n name: post.folder.name,\n });\n }\n\n breadcrumbItems.push({\n slugNoPrefixSlash: post.slug,\n name: post.title,\n });\n\n return (\n <>\n {post.faqs && (\n <OpinlyJSONLD content={JSON.stringify(genFaqJSONLD(post.faqs))} />\n )}\n <OpinlyJSONLD content={JSON.stringify(genBlogPostingJSONLD(post))} />\n <OpinlyBreadCrumbJsonLd items={breadcrumbItems} />\n <div className=\"max-w-7xl mx-auto px-4 py-24 flex items-start space-x-8\">\n <div className=\"flex flex-col gap-12 w-full\">\n <div>\n <BreadCrumbs\n breadcrumbs={[\n post.folder && {\n url: `${opinlyConfig.blogPrefix}/${post.folder.slug}`,\n name: post.folder.name,\n },\n ]}\n />\n\n <h1 className=\"text-op-heading text-4xl font-bold mb-2 leading-tight\">\n {post.title}\n </h1>\n <div className=\"text-sm mb-4 text-op-muted space-x-1\">\n {post.author && (\n <>\n <Link\n href={`${opinlyConfig.blogPrefix}/authors/${post.author?.slug}`}\n className=\"font-medium\"\n >\n {post.author?.name}\n </Link
|
|
1
|
+
{"version":3,"sources":["../../../src/components/blog-post/index.tsx"],"sourcesContent":["import React from \"react\";\nimport { JSONContent } from \"@tiptap/core\";\nimport Link from \"next/link\";\nimport { cn } from \"../../utils/merge\";\nimport { opinlyConfig } from \"../../utils/sdk-config\";\nimport { BlogPostRes } from \"./_types/blog-post\";\nimport { genBlogPostingJSONLD, genFaqJSONLD } from \"./_helpers/json-ld\";\nimport { BlogComponentClassNames } from \"./_types/class-names\";\nimport { FAQS } from \"./_components/faq\";\nimport { calculateReadingTime } from \"./_helpers/reading-time\";\nimport { Content } from \"./_components/content\";\nimport { TableOfContents } from \"./_components/table-of-contents\";\nimport { BreadCrumbs } from \"../bread-crumbs\";\nimport { formatDate } from \"../../utils/dates\";\nimport Script from \"next/script\";\nimport { OpinlyBreadCrumbJsonLd, OpinlyJSONLD } from \"../json-ld\";\n\nexport type BlogPostProps = {\n cta?: React.ReactNode;\n};\n\nexport const BlogPost = ({\n post,\n classNames = {},\n cta,\n}: {\n post: BlogPostRes;\n classNames?: BlogComponentClassNames;\n} & BlogPostProps) => {\n const content = post.content as JSONContent;\n\n const breadcrumbItems = [];\n\n if (post.folder) {\n breadcrumbItems.push({\n slugNoPrefixSlash: post.folder.slug,\n name: post.folder.name,\n });\n }\n\n breadcrumbItems.push({\n slugNoPrefixSlash: post.slug,\n name: post.title,\n });\n\n return (\n <>\n {post.faqs && (\n <OpinlyJSONLD content={JSON.stringify(genFaqJSONLD(post.faqs))} />\n )}\n <OpinlyJSONLD content={JSON.stringify(genBlogPostingJSONLD(post))} />\n <OpinlyBreadCrumbJsonLd items={breadcrumbItems} />\n <div className=\"max-w-7xl mx-auto px-4 py-24 flex items-start space-x-8\">\n <div className=\"flex flex-col gap-12 w-full\">\n <div>\n <BreadCrumbs\n breadcrumbs={[\n post.folder && {\n url: `${opinlyConfig.blogPrefix}/${post.folder.slug}`,\n name: post.folder.name,\n },\n ]}\n />\n\n <h1 className=\"text-op-heading text-4xl font-bold mb-2 leading-tight\">\n {post.title}\n </h1>\n <div className=\"text-sm mb-4 text-op-muted space-x-1\">\n {post.author && (\n <>\n <Link\n href={`${opinlyConfig.blogPrefix}/authors/${post.author?.slug}`}\n className=\"font-medium\"\n >\n {post.author?.name}\n </Link>\n <span className=\"text-op-muted\">·</span>\n </>\n )}\n <span>\n {calculateReadingTime(content)} min read <span>·</span>\n </span>\n <span>\n {formatDate(post.firstPublishedAt as string) || \"Today\"}\n </span>\n </div>\n </div>\n\n <div\n className={cn(\n \"flex md:space-x-12 flex-col mx-auto w-full\",\n \"md:flex-row-reverse\",\n classNames.container\n )}\n >\n <article className=\"w-full md:w-3/4 order-2 md:order-1 flex items-start\">\n <div className=\"prose w-full \">\n <Content content={content} classNames={classNames} />\n <FAQS faqs={post.faqs} />\n </div>\n </article>\n <div className=\"flex md:w-1/4 md:sticky md:top-20\">\n <TableOfContents\n content={content}\n author={post.author}\n post={post}\n cta={cta}\n />\n </div>\n </div>\n </div>\n </div>\n </>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAgDQ;AA9CR,kBAAiB;AACjB,mBAAmB;AACnB,wBAA6B;AAE7B,qBAAmD;AAEnD,iBAAqB;AACrB,0BAAqC;AACrC,qBAAwB;AACxB,+BAAgC;AAChC,0BAA4B;AAC5B,mBAA2B;AAE3B,IAAAA,kBAAqD;AAM9C,MAAM,WAAW,CAAC;AAAA,EACvB;AAAA,EACA,aAAa,CAAC;AAAA,EACd;AACF,MAGsB;AACpB,QAAM,UAAU,KAAK;AAErB,QAAM,kBAAkB,CAAC;AAEzB,MAAI,KAAK,QAAQ;AACf,oBAAgB,KAAK;AAAA,MACnB,mBAAmB,KAAK,OAAO;AAAA,MAC/B,MAAM,KAAK,OAAO;AAAA,IACpB,CAAC;AAAA,EACH;AAEA,kBAAgB,KAAK;AAAA,IACnB,mBAAmB,KAAK;AAAA,IACxB,MAAM,KAAK;AAAA,EACb,CAAC;AAED,SACE,4EACG;AAAA,SAAK,QACJ,4CAAC,gCAAa,SAAS,KAAK,cAAU,6BAAa,KAAK,IAAI,CAAC,GAAG;AAAA,IAElE,4CAAC,gCAAa,SAAS,KAAK,cAAU,qCAAqB,IAAI,CAAC,GAAG;AAAA,IACnE,4CAAC,0CAAuB,OAAO,iBAAiB;AAAA,IAChD,4CAAC,SAAI,WAAU,2DACb,uDAAC,SAAI,WAAU,+BACb;AAAA,mDAAC,SACC;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,aAAa;AAAA,cACX,KAAK,UAAU;AAAA,gBACb,KAAK,GAAG,+BAAa,UAAU,IAAI,KAAK,OAAO,IAAI;AAAA,gBACnD,MAAM,KAAK,OAAO;AAAA,cACpB;AAAA,YACF;AAAA;AAAA,QACF;AAAA,QAEA,4CAAC,QAAG,WAAU,yDACX,eAAK,OACR;AAAA,QACA,6CAAC,SAAI,WAAU,wCACZ;AAAA,eAAK,UACJ,4EACE;AAAA;AAAA,cAAC,YAAAC;AAAA,cAAA;AAAA,gBACC,MAAM,GAAG,+BAAa,UAAU,YAAY,KAAK,QAAQ,IAAI;AAAA,gBAC7D,WAAU;AAAA,gBAET,eAAK,QAAQ;AAAA;AAAA,YAChB;AAAA,YACA,4CAAC,UAAK,WAAU,iBAAgB,kBAAC;AAAA,aACnC;AAAA,UAEF,6CAAC,UACE;AAAA,0DAAqB,OAAO;AAAA,YAAE;AAAA,YAAU,4CAAC,UAAK,kBAAC;AAAA,aAClD;AAAA,UACA,4CAAC,UACE,uCAAW,KAAK,gBAA0B,KAAK,SAClD;AAAA,WACF;AAAA,SACF;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,eAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA,WAAW;AAAA,UACb;AAAA,UAEA;AAAA,wDAAC,aAAQ,WAAU,uDACjB,uDAAC,SAAI,WAAU,iBACb;AAAA,0DAAC,0BAAQ,SAAkB,YAAwB;AAAA,cACnD,4CAAC,mBAAK,MAAM,KAAK,MAAM;AAAA,eACzB,GACF;AAAA,YACA,4CAAC,SAAI,WAAU,qCACb;AAAA,cAAC;AAAA;AAAA,gBACC;AAAA,gBACA,QAAQ,KAAK;AAAA,gBACb;AAAA,gBACA;AAAA;AAAA,YACF,GACF;AAAA;AAAA;AAAA,MACF;AAAA,OACF,GACF;AAAA,KACF;AAEJ;","names":["import_json_ld","Link"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/blog-post/index.tsx"],"sourcesContent":["import React from \"react\";\nimport { JSONContent } from \"@tiptap/core\";\nimport Link from \"next/link\";\nimport { cn } from \"../../utils/merge\";\nimport { opinlyConfig } from \"../../utils/sdk-config\";\nimport { BlogPostRes } from \"./_types/blog-post\";\nimport { genBlogPostingJSONLD, genFaqJSONLD } from \"./_helpers/json-ld\";\nimport { BlogComponentClassNames } from \"./_types/class-names\";\nimport { FAQS } from \"./_components/faq\";\nimport { calculateReadingTime } from \"./_helpers/reading-time\";\nimport { Content } from \"./_components/content\";\nimport { TableOfContents } from \"./_components/table-of-contents\";\nimport { BreadCrumbs } from \"../bread-crumbs\";\nimport { formatDate } from \"../../utils/dates\";\nimport Script from \"next/script\";\nimport { OpinlyBreadCrumbJsonLd, OpinlyJSONLD } from \"../json-ld\";\n\nexport type BlogPostProps = {\n cta?: React.ReactNode;\n};\n\nexport const BlogPost = ({\n post,\n classNames = {},\n cta,\n}: {\n post: BlogPostRes;\n classNames?: BlogComponentClassNames;\n} & BlogPostProps) => {\n const content = post.content as JSONContent;\n\n const breadcrumbItems = [];\n\n if (post.folder) {\n breadcrumbItems.push({\n slugNoPrefixSlash: post.folder.slug,\n name: post.folder.name,\n });\n }\n\n breadcrumbItems.push({\n slugNoPrefixSlash: post.slug,\n name: post.title,\n });\n\n return (\n <>\n {post.faqs && (\n <OpinlyJSONLD content={JSON.stringify(genFaqJSONLD(post.faqs))} />\n )}\n <OpinlyJSONLD content={JSON.stringify(genBlogPostingJSONLD(post))} />\n <OpinlyBreadCrumbJsonLd items={breadcrumbItems} />\n <div className=\"max-w-7xl mx-auto px-4 py-24 flex items-start space-x-8\">\n <div className=\"flex flex-col gap-12 w-full\">\n <div>\n <BreadCrumbs\n breadcrumbs={[\n post.folder && {\n url: `${opinlyConfig.blogPrefix}/${post.folder.slug}`,\n name: post.folder.name,\n },\n ]}\n />\n\n <h1 className=\"text-op-heading text-4xl font-bold mb-2 leading-tight\">\n {post.title}\n </h1>\n <div className=\"text-sm mb-4 text-op-muted space-x-1\">\n {post.author && (\n <>\n <Link\n href={`${opinlyConfig.blogPrefix}/authors/${post.author?.slug}`}\n className=\"font-medium\"\n >\n {post.author?.name}\n </Link
|
|
1
|
+
{"version":3,"sources":["../../../src/components/blog-post/index.tsx"],"sourcesContent":["import React from \"react\";\nimport { JSONContent } from \"@tiptap/core\";\nimport Link from \"next/link\";\nimport { cn } from \"../../utils/merge\";\nimport { opinlyConfig } from \"../../utils/sdk-config\";\nimport { BlogPostRes } from \"./_types/blog-post\";\nimport { genBlogPostingJSONLD, genFaqJSONLD } from \"./_helpers/json-ld\";\nimport { BlogComponentClassNames } from \"./_types/class-names\";\nimport { FAQS } from \"./_components/faq\";\nimport { calculateReadingTime } from \"./_helpers/reading-time\";\nimport { Content } from \"./_components/content\";\nimport { TableOfContents } from \"./_components/table-of-contents\";\nimport { BreadCrumbs } from \"../bread-crumbs\";\nimport { formatDate } from \"../../utils/dates\";\nimport Script from \"next/script\";\nimport { OpinlyBreadCrumbJsonLd, OpinlyJSONLD } from \"../json-ld\";\n\nexport type BlogPostProps = {\n cta?: React.ReactNode;\n};\n\nexport const BlogPost = ({\n post,\n classNames = {},\n cta,\n}: {\n post: BlogPostRes;\n classNames?: BlogComponentClassNames;\n} & BlogPostProps) => {\n const content = post.content as JSONContent;\n\n const breadcrumbItems = [];\n\n if (post.folder) {\n breadcrumbItems.push({\n slugNoPrefixSlash: post.folder.slug,\n name: post.folder.name,\n });\n }\n\n breadcrumbItems.push({\n slugNoPrefixSlash: post.slug,\n name: post.title,\n });\n\n return (\n <>\n {post.faqs && (\n <OpinlyJSONLD content={JSON.stringify(genFaqJSONLD(post.faqs))} />\n )}\n <OpinlyJSONLD content={JSON.stringify(genBlogPostingJSONLD(post))} />\n <OpinlyBreadCrumbJsonLd items={breadcrumbItems} />\n <div className=\"max-w-7xl mx-auto px-4 py-24 flex items-start space-x-8\">\n <div className=\"flex flex-col gap-12 w-full\">\n <div>\n <BreadCrumbs\n breadcrumbs={[\n post.folder && {\n url: `${opinlyConfig.blogPrefix}/${post.folder.slug}`,\n name: post.folder.name,\n },\n ]}\n />\n\n <h1 className=\"text-op-heading text-4xl font-bold mb-2 leading-tight\">\n {post.title}\n </h1>\n <div className=\"text-sm mb-4 text-op-muted space-x-1\">\n {post.author && (\n <>\n <Link\n href={`${opinlyConfig.blogPrefix}/authors/${post.author?.slug}`}\n className=\"font-medium\"\n >\n {post.author?.name}\n </Link>\n <span className=\"text-op-muted\">·</span>\n </>\n )}\n <span>\n {calculateReadingTime(content)} min read <span>·</span>\n </span>\n <span>\n {formatDate(post.firstPublishedAt as string) || \"Today\"}\n </span>\n </div>\n </div>\n\n <div\n className={cn(\n \"flex md:space-x-12 flex-col mx-auto w-full\",\n \"md:flex-row-reverse\",\n classNames.container\n )}\n >\n <article className=\"w-full md:w-3/4 order-2 md:order-1 flex items-start\">\n <div className=\"prose w-full \">\n <Content content={content} classNames={classNames} />\n <FAQS faqs={post.faqs} />\n </div>\n </article>\n <div className=\"flex md:w-1/4 md:sticky md:top-20\">\n <TableOfContents\n content={content}\n author={post.author}\n post={post}\n cta={cta}\n />\n </div>\n </div>\n </div>\n </div>\n </>\n );\n};\n"],"mappings":"AAgDQ,SAqBQ,UArBR,KAqBQ,YArBR;AA9CR,OAAO,UAAU;AACjB,SAAS,UAAU;AACnB,SAAS,oBAAoB;AAE7B,SAAS,sBAAsB,oBAAoB;AAEnD,SAAS,YAAY;AACrB,SAAS,4BAA4B;AACrC,SAAS,eAAe;AACxB,SAAS,uBAAuB;AAChC,SAAS,mBAAmB;AAC5B,SAAS,kBAAkB;AAE3B,SAAS,wBAAwB,oBAAoB;AAM9C,MAAM,WAAW,CAAC;AAAA,EACvB;AAAA,EACA,aAAa,CAAC;AAAA,EACd;AACF,MAGsB;AACpB,QAAM,UAAU,KAAK;AAErB,QAAM,kBAAkB,CAAC;AAEzB,MAAI,KAAK,QAAQ;AACf,oBAAgB,KAAK;AAAA,MACnB,mBAAmB,KAAK,OAAO;AAAA,MAC/B,MAAM,KAAK,OAAO;AAAA,IACpB,CAAC;AAAA,EACH;AAEA,kBAAgB,KAAK;AAAA,IACnB,mBAAmB,KAAK;AAAA,IACxB,MAAM,KAAK;AAAA,EACb,CAAC;AAED,SACE,iCACG;AAAA,SAAK,QACJ,oBAAC,gBAAa,SAAS,KAAK,UAAU,aAAa,KAAK,IAAI,CAAC,GAAG;AAAA,IAElE,oBAAC,gBAAa,SAAS,KAAK,UAAU,qBAAqB,IAAI,CAAC,GAAG;AAAA,IACnE,oBAAC,0BAAuB,OAAO,iBAAiB;AAAA,IAChD,oBAAC,SAAI,WAAU,2DACb,+BAAC,SAAI,WAAU,+BACb;AAAA,2BAAC,SACC;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,aAAa;AAAA,cACX,KAAK,UAAU;AAAA,gBACb,KAAK,GAAG,aAAa,UAAU,IAAI,KAAK,OAAO,IAAI;AAAA,gBACnD,MAAM,KAAK,OAAO;AAAA,cACpB;AAAA,YACF;AAAA;AAAA,QACF;AAAA,QAEA,oBAAC,QAAG,WAAU,yDACX,eAAK,OACR;AAAA,QACA,qBAAC,SAAI,WAAU,wCACZ;AAAA,eAAK,UACJ,iCACE;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,MAAM,GAAG,aAAa,UAAU,YAAY,KAAK,QAAQ,IAAI;AAAA,gBAC7D,WAAU;AAAA,gBAET,eAAK,QAAQ;AAAA;AAAA,YAChB;AAAA,YACA,oBAAC,UAAK,WAAU,iBAAgB,kBAAC;AAAA,aACnC;AAAA,UAEF,qBAAC,UACE;AAAA,iCAAqB,OAAO;AAAA,YAAE;AAAA,YAAU,oBAAC,UAAK,kBAAC;AAAA,aAClD;AAAA,UACA,oBAAC,UACE,qBAAW,KAAK,gBAA0B,KAAK,SAClD;AAAA,WACF;AAAA,SACF;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA,WAAW;AAAA,UACb;AAAA,UAEA;AAAA,gCAAC,aAAQ,WAAU,uDACjB,+BAAC,SAAI,WAAU,iBACb;AAAA,kCAAC,WAAQ,SAAkB,YAAwB;AAAA,cACnD,oBAAC,QAAK,MAAM,KAAK,MAAM;AAAA,eACzB,GACF;AAAA,YACA,oBAAC,SAAI,WAAU,qCACb;AAAA,cAAC;AAAA;AAAA,gBACC;AAAA,gBACA,QAAQ,KAAK;AAAA,gBACb;AAAA,gBACA;AAAA;AAAA,YACF,GACF;AAAA;AAAA;AAAA,MACF;AAAA,OACF,GACF;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -29,28 +29,26 @@ var import_author_page = require("./author-page");
|
|
|
29
29
|
var import_authors_page = require("./authors-page");
|
|
30
30
|
var import_navigation = require("next/navigation");
|
|
31
31
|
const OpinlyBlog = async ({
|
|
32
|
-
|
|
33
|
-
client,
|
|
32
|
+
data,
|
|
34
33
|
homePageProps = {},
|
|
35
34
|
blogPostProps = {}
|
|
36
35
|
}) => {
|
|
37
|
-
|
|
38
|
-
if (blog.type === "not-found") {
|
|
36
|
+
if (data.type === "not-found") {
|
|
39
37
|
return (0, import_navigation.notFound)();
|
|
40
38
|
}
|
|
41
|
-
if (
|
|
42
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_home_page.HomePage, { data:
|
|
39
|
+
if (data.type === "home") {
|
|
40
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_home_page.HomePage, { data: data.data, ...homePageProps });
|
|
43
41
|
}
|
|
44
|
-
if (
|
|
45
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_blog_post.BlogPost, { post:
|
|
42
|
+
if (data.type === "post") {
|
|
43
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_blog_post.BlogPost, { post: data.data, ...blogPostProps });
|
|
46
44
|
}
|
|
47
|
-
if (
|
|
48
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_author_page.AuthorPage, { author:
|
|
45
|
+
if (data.type === "author") {
|
|
46
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_author_page.AuthorPage, { author: data.data });
|
|
49
47
|
}
|
|
50
|
-
if (
|
|
51
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_authors_page.AuthorsPage, { authors:
|
|
48
|
+
if (data.type === "authors") {
|
|
49
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_authors_page.AuthorsPage, { authors: data.data });
|
|
52
50
|
}
|
|
53
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_folder_page.FolderPage, { folder:
|
|
51
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_folder_page.FolderPage, { folder: data.data });
|
|
54
52
|
};
|
|
55
53
|
// Annotate the CommonJS export names for ESM import in node:
|
|
56
54
|
0 && (module.exports = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/opinly-blog.tsx"],"sourcesContent":["import { BlogPost, BlogPostProps } from \"./blog-post\";\nimport { FolderPage } from \"./folder-page\";\nimport { Opinly, OpinlyPagePropsPromisified } from \"@opinly/backend\";\nimport { HomePage, HomePageProps } from \"./home-page\";\nimport { AuthorPage } from \"./author-page\";\nimport { AuthorsPage } from \"./authors-page\";\nimport { notFound } from \"next/navigation\";\n\nexport const OpinlyBlog = async ({\n
|
|
1
|
+
{"version":3,"sources":["../../src/components/opinly-blog.tsx"],"sourcesContent":["import { BlogPost, BlogPostProps } from \"./blog-post\";\nimport { FolderPage } from \"./folder-page\";\nimport { Opinly, OpinlyPagePropsPromisified } from \"@opinly/backend\";\nimport { HomePage, HomePageProps } from \"./home-page\";\nimport { AuthorPage } from \"./author-page\";\nimport { AuthorsPage } from \"./authors-page\";\nimport { notFound } from \"next/navigation\";\n\nexport const OpinlyBlog = async ({\n data,\n homePageProps = {},\n blogPostProps = {},\n}: {\n data: Awaited<ReturnType<Opinly[\"content\"][\"blog\"]>>;\n homePageProps?: HomePageProps;\n blogPostProps?: BlogPostProps;\n}) => {\n if (data.type === \"not-found\") {\n return notFound();\n }\n\n if (data.type === \"home\") {\n return <HomePage data={data.data} {...homePageProps} />;\n }\n\n if (data.type === \"post\") {\n // hello\n return <BlogPost post={data.data} {...blogPostProps} />;\n }\n\n if (data.type === \"author\") {\n return <AuthorPage author={data.data} />;\n }\n\n if (data.type === \"authors\") {\n return <AuthorsPage authors={data.data} />;\n }\n\n return <FolderPage folder={data.data} />;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBW;AAtBX,uBAAwC;AACxC,yBAA2B;AAE3B,uBAAwC;AACxC,yBAA2B;AAC3B,0BAA4B;AAC5B,wBAAyB;AAElB,MAAM,aAAa,OAAO;AAAA,EAC/B;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,gBAAgB,CAAC;AACnB,MAIM;AACJ,MAAI,KAAK,SAAS,aAAa;AAC7B,eAAO,4BAAS;AAAA,EAClB;AAEA,MAAI,KAAK,SAAS,QAAQ;AACxB,WAAO,4CAAC,6BAAS,MAAM,KAAK,MAAO,GAAG,eAAe;AAAA,EACvD;AAEA,MAAI,KAAK,SAAS,QAAQ;AAExB,WAAO,4CAAC,6BAAS,MAAM,KAAK,MAAO,GAAG,eAAe;AAAA,EACvD;AAEA,MAAI,KAAK,SAAS,UAAU;AAC1B,WAAO,4CAAC,iCAAW,QAAQ,KAAK,MAAM;AAAA,EACxC;AAEA,MAAI,KAAK,SAAS,WAAW;AAC3B,WAAO,4CAAC,mCAAY,SAAS,KAAK,MAAM;AAAA,EAC1C;AAEA,SAAO,4CAAC,iCAAW,QAAQ,KAAK,MAAM;AACxC;","names":[]}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import { BlogPostProps } from './blog-post/index.cjs';
|
|
3
|
-
import {
|
|
3
|
+
import { Opinly } from '@opinly/backend';
|
|
4
4
|
import { HomePageProps } from './home-page/index.cjs';
|
|
5
5
|
import 'react';
|
|
6
6
|
import './blog-post/_types/blog-post.cjs';
|
|
7
7
|
import './blog-post/_types/class-names.cjs';
|
|
8
8
|
|
|
9
|
-
declare const OpinlyBlog: ({
|
|
10
|
-
|
|
11
|
-
client: Opinly;
|
|
9
|
+
declare const OpinlyBlog: ({ data, homePageProps, blogPostProps, }: {
|
|
10
|
+
data: Awaited<ReturnType<Opinly["content"]["blog"]>>;
|
|
12
11
|
homePageProps?: HomePageProps;
|
|
13
12
|
blogPostProps?: BlogPostProps;
|
|
14
13
|
}) => Promise<react_jsx_runtime.JSX.Element>;
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import { BlogPostProps } from './blog-post/index.js';
|
|
3
|
-
import {
|
|
3
|
+
import { Opinly } from '@opinly/backend';
|
|
4
4
|
import { HomePageProps } from './home-page/index.js';
|
|
5
5
|
import 'react';
|
|
6
6
|
import './blog-post/_types/blog-post.js';
|
|
7
7
|
import './blog-post/_types/class-names.js';
|
|
8
8
|
|
|
9
|
-
declare const OpinlyBlog: ({
|
|
10
|
-
|
|
11
|
-
client: Opinly;
|
|
9
|
+
declare const OpinlyBlog: ({ data, homePageProps, blogPostProps, }: {
|
|
10
|
+
data: Awaited<ReturnType<Opinly["content"]["blog"]>>;
|
|
12
11
|
homePageProps?: HomePageProps;
|
|
13
12
|
blogPostProps?: BlogPostProps;
|
|
14
13
|
}) => Promise<react_jsx_runtime.JSX.Element>;
|
|
@@ -6,28 +6,26 @@ import { AuthorPage } from "./author-page";
|
|
|
6
6
|
import { AuthorsPage } from "./authors-page";
|
|
7
7
|
import { notFound } from "next/navigation";
|
|
8
8
|
const OpinlyBlog = async ({
|
|
9
|
-
|
|
10
|
-
client,
|
|
9
|
+
data,
|
|
11
10
|
homePageProps = {},
|
|
12
11
|
blogPostProps = {}
|
|
13
12
|
}) => {
|
|
14
|
-
|
|
15
|
-
if (blog.type === "not-found") {
|
|
13
|
+
if (data.type === "not-found") {
|
|
16
14
|
return notFound();
|
|
17
15
|
}
|
|
18
|
-
if (
|
|
19
|
-
return /* @__PURE__ */ jsx(HomePage, { data:
|
|
16
|
+
if (data.type === "home") {
|
|
17
|
+
return /* @__PURE__ */ jsx(HomePage, { data: data.data, ...homePageProps });
|
|
20
18
|
}
|
|
21
|
-
if (
|
|
22
|
-
return /* @__PURE__ */ jsx(BlogPost, { post:
|
|
19
|
+
if (data.type === "post") {
|
|
20
|
+
return /* @__PURE__ */ jsx(BlogPost, { post: data.data, ...blogPostProps });
|
|
23
21
|
}
|
|
24
|
-
if (
|
|
25
|
-
return /* @__PURE__ */ jsx(AuthorPage, { author:
|
|
22
|
+
if (data.type === "author") {
|
|
23
|
+
return /* @__PURE__ */ jsx(AuthorPage, { author: data.data });
|
|
26
24
|
}
|
|
27
|
-
if (
|
|
28
|
-
return /* @__PURE__ */ jsx(AuthorsPage, { authors:
|
|
25
|
+
if (data.type === "authors") {
|
|
26
|
+
return /* @__PURE__ */ jsx(AuthorsPage, { authors: data.data });
|
|
29
27
|
}
|
|
30
|
-
return /* @__PURE__ */ jsx(FolderPage, { folder:
|
|
28
|
+
return /* @__PURE__ */ jsx(FolderPage, { folder: data.data });
|
|
31
29
|
};
|
|
32
30
|
export {
|
|
33
31
|
OpinlyBlog
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/opinly-blog.tsx"],"sourcesContent":["import { BlogPost, BlogPostProps } from \"./blog-post\";\nimport { FolderPage } from \"./folder-page\";\nimport { Opinly, OpinlyPagePropsPromisified } from \"@opinly/backend\";\nimport { HomePage, HomePageProps } from \"./home-page\";\nimport { AuthorPage } from \"./author-page\";\nimport { AuthorsPage } from \"./authors-page\";\nimport { notFound } from \"next/navigation\";\n\nexport const OpinlyBlog = async ({\n
|
|
1
|
+
{"version":3,"sources":["../../src/components/opinly-blog.tsx"],"sourcesContent":["import { BlogPost, BlogPostProps } from \"./blog-post\";\nimport { FolderPage } from \"./folder-page\";\nimport { Opinly, OpinlyPagePropsPromisified } from \"@opinly/backend\";\nimport { HomePage, HomePageProps } from \"./home-page\";\nimport { AuthorPage } from \"./author-page\";\nimport { AuthorsPage } from \"./authors-page\";\nimport { notFound } from \"next/navigation\";\n\nexport const OpinlyBlog = async ({\n data,\n homePageProps = {},\n blogPostProps = {},\n}: {\n data: Awaited<ReturnType<Opinly[\"content\"][\"blog\"]>>;\n homePageProps?: HomePageProps;\n blogPostProps?: BlogPostProps;\n}) => {\n if (data.type === \"not-found\") {\n return notFound();\n }\n\n if (data.type === \"home\") {\n return <HomePage data={data.data} {...homePageProps} />;\n }\n\n if (data.type === \"post\") {\n // hello\n return <BlogPost post={data.data} {...blogPostProps} />;\n }\n\n if (data.type === \"author\") {\n return <AuthorPage author={data.data} />;\n }\n\n if (data.type === \"authors\") {\n return <AuthorsPage authors={data.data} />;\n }\n\n return <FolderPage folder={data.data} />;\n};\n"],"mappings":"AAsBW;AAtBX,SAAS,gBAA+B;AACxC,SAAS,kBAAkB;AAE3B,SAAS,gBAA+B;AACxC,SAAS,kBAAkB;AAC3B,SAAS,mBAAmB;AAC5B,SAAS,gBAAgB;AAElB,MAAM,aAAa,OAAO;AAAA,EAC/B;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,gBAAgB,CAAC;AACnB,MAIM;AACJ,MAAI,KAAK,SAAS,aAAa;AAC7B,WAAO,SAAS;AAAA,EAClB;AAEA,MAAI,KAAK,SAAS,QAAQ;AACxB,WAAO,oBAAC,YAAS,MAAM,KAAK,MAAO,GAAG,eAAe;AAAA,EACvD;AAEA,MAAI,KAAK,SAAS,QAAQ;AAExB,WAAO,oBAAC,YAAS,MAAM,KAAK,MAAO,GAAG,eAAe;AAAA,EACvD;AAEA,MAAI,KAAK,SAAS,UAAU;AAC1B,WAAO,oBAAC,cAAW,QAAQ,KAAK,MAAM;AAAA,EACxC;AAEA,MAAI,KAAK,SAAS,WAAW;AAC3B,WAAO,oBAAC,eAAY,SAAS,KAAK,MAAM;AAAA,EAC1C;AAEA,SAAO,oBAAC,cAAW,QAAQ,KAAK,MAAM;AACxC;","names":[]}
|
|
@@ -28,6 +28,17 @@ const generateOpinlyMetadata = async (client, params, parent) => {
|
|
|
28
28
|
return parent;
|
|
29
29
|
}
|
|
30
30
|
const previousImages = (await parent).openGraph?.images || [];
|
|
31
|
+
if (blog.type === "home") {
|
|
32
|
+
return {
|
|
33
|
+
...parent,
|
|
34
|
+
title: `${import_sdk_config.opinlyConfig.siteName} Blog`,
|
|
35
|
+
description: `Explore the latest articles from the ${import_sdk_config.opinlyConfig.siteName} Blog`,
|
|
36
|
+
openGraph: {
|
|
37
|
+
title: `${import_sdk_config.opinlyConfig.siteName} Blog`,
|
|
38
|
+
description: `Explore the latest articles from the ${import_sdk_config.opinlyConfig.siteName} Blog`
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
}
|
|
31
42
|
if (blog.type === "post") {
|
|
32
43
|
const openGraphImageKey = blog.data?.titleFile?.fileKey;
|
|
33
44
|
const images = openGraphImageKey ? [`${import_sdk_config.opinlyConfig.imagesPrefix}/${openGraphImageKey}`, ...previousImages] : previousImages;
|
|
@@ -53,6 +64,42 @@ const generateOpinlyMetadata = async (client, params, parent) => {
|
|
|
53
64
|
other: {}
|
|
54
65
|
};
|
|
55
66
|
}
|
|
67
|
+
if (blog.type === "author") {
|
|
68
|
+
const authorImageKey = blog.data.image?.fileKey;
|
|
69
|
+
const images = authorImageKey ? [`${import_sdk_config.opinlyConfig.imagesPrefix}/${authorImageKey}`] : [];
|
|
70
|
+
return {
|
|
71
|
+
...parent,
|
|
72
|
+
title: blog.data.name,
|
|
73
|
+
description: blog.data.bio || void 0,
|
|
74
|
+
openGraph: {
|
|
75
|
+
images: images.length > 0 ? images : void 0,
|
|
76
|
+
title: blog.data.name,
|
|
77
|
+
description: blog.data.bio || void 0
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
if (blog.type === "authors") {
|
|
82
|
+
return {
|
|
83
|
+
...parent,
|
|
84
|
+
title: `${import_sdk_config.opinlyConfig.siteName} Blog - Authors`,
|
|
85
|
+
description: `Browse all authors on the ${import_sdk_config.opinlyConfig.siteName} Blog`,
|
|
86
|
+
openGraph: {
|
|
87
|
+
title: `${import_sdk_config.opinlyConfig.siteName} Blog - Authors`,
|
|
88
|
+
description: `Browse all authors on the ${import_sdk_config.opinlyConfig.siteName} Blog`
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
if (blog.type === "folder") {
|
|
93
|
+
return {
|
|
94
|
+
...parent,
|
|
95
|
+
title: `${import_sdk_config.opinlyConfig.siteName} Blog - Folder: ${blog.data.name}`,
|
|
96
|
+
description: blog.data.description || void 0,
|
|
97
|
+
openGraph: {
|
|
98
|
+
title: `${import_sdk_config.opinlyConfig.siteName} Blog - Folder: ${blog.data.name}`,
|
|
99
|
+
description: blog.data.description || void 0
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
}
|
|
56
103
|
return parent;
|
|
57
104
|
};
|
|
58
105
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/generate-metadata.ts"],"sourcesContent":["import { Opinly, OpinlyPagePropsPromisified } from \"@opinly/backend\";\nimport type { Metadata, ResolvingMetadata } from \"next\";\nimport { opinlyConfig } from \"./sdk-config\";\n\nexport const generateOpinlyMetadata = async (\n client: Opinly,\n params: OpinlyPagePropsPromisified,\n parent: ResolvingMetadata\n): Promise<Metadata> => {\n const blog = await client.content.blog(params);\n\n if (blog.type === \"not-found\") {\n return parent as Metadata;\n }\n\n const previousImages = (await parent).openGraph?.images || [];\n\n if (blog.type === \"post\") {\n const openGraphImageKey = blog.data?.titleFile?.fileKey;\n\n const images = openGraphImageKey\n ? [`${opinlyConfig.imagesPrefix}/${openGraphImageKey}`, ...previousImages]\n : previousImages;\n\n return {\n ...(parent as Metadata),\n title: blog.data.title,\n description: blog.data.description,\n openGraph: {\n images: images,\n type: \"article\",\n authors: blog.data.author && [\n `${opinlyConfig.imagesPrefix}/authors/${blog.data.author.slug}`,\n ],\n title: blog.data.title,\n },\n // keywords: [blog.data.keywords],\n\n authors: blog.data.author && [\n {\n name: blog.data.author.name,\n url: `${opinlyConfig.imagesPrefix}/authors/${blog.data.author.slug}`,\n },\n ],\n other: {},\n };\n }\n\n return parent as Metadata;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,wBAA6B;AAEtB,MAAM,yBAAyB,OACpC,QACA,QACA,WACsB;AACtB,QAAM,OAAO,MAAM,OAAO,QAAQ,KAAK,MAAM;AAE7C,MAAI,KAAK,SAAS,aAAa;AAC7B,WAAO;AAAA,EACT;AAEA,QAAM,kBAAkB,MAAM,QAAQ,WAAW,UAAU,CAAC;AAE5D,MAAI,KAAK,SAAS,QAAQ;AACxB,UAAM,oBAAoB,KAAK,MAAM,WAAW;AAEhD,UAAM,SAAS,oBACX,CAAC,GAAG,+BAAa,YAAY,IAAI,iBAAiB,IAAI,GAAG,cAAc,IACvE;AAEJ,WAAO;AAAA,MACL,GAAI;AAAA,MACJ,OAAO,KAAK,KAAK;AAAA,MACjB,aAAa,KAAK,KAAK;AAAA,MACvB,WAAW;AAAA,QACT;AAAA,QACA,MAAM;AAAA,QACN,SAAS,KAAK,KAAK,UAAU;AAAA,UAC3B,GAAG,+BAAa,YAAY,YAAY,KAAK,KAAK,OAAO,IAAI;AAAA,QAC/D;AAAA,QACA,OAAO,KAAK,KAAK;AAAA,MACnB;AAAA;AAAA,MAGA,SAAS,KAAK,KAAK,UAAU;AAAA,QAC3B;AAAA,UACE,MAAM,KAAK,KAAK,OAAO;AAAA,UACvB,KAAK,GAAG,+BAAa,YAAY,YAAY,KAAK,KAAK,OAAO,IAAI;AAAA,QACpE;AAAA,MACF;AAAA,MACA,OAAO,CAAC;AAAA,IACV;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/generate-metadata.ts"],"sourcesContent":["import { Opinly, OpinlyPagePropsPromisified } from \"@opinly/backend\";\nimport type { Metadata, ResolvingMetadata } from \"next\";\nimport { opinlyConfig } from \"./sdk-config\";\n\nexport const generateOpinlyMetadata = async (\n client: Opinly,\n params: OpinlyPagePropsPromisified,\n parent: ResolvingMetadata\n): Promise<Metadata> => {\n const blog = await client.content.blog(params);\n\n if (blog.type === \"not-found\") {\n return parent as Metadata;\n }\n\n const previousImages = (await parent).openGraph?.images || [];\n\n if (blog.type === \"home\") {\n return {\n ...(parent as Metadata),\n title: `${opinlyConfig.siteName} Blog`,\n description: `Explore the latest articles from the ${opinlyConfig.siteName} Blog`,\n openGraph: {\n title: `${opinlyConfig.siteName} Blog`,\n description: `Explore the latest articles from the ${opinlyConfig.siteName} Blog`,\n },\n };\n }\n\n if (blog.type === \"post\") {\n const openGraphImageKey = blog.data?.titleFile?.fileKey;\n\n const images = openGraphImageKey\n ? [`${opinlyConfig.imagesPrefix}/${openGraphImageKey}`, ...previousImages]\n : previousImages;\n\n return {\n ...(parent as Metadata),\n title: blog.data.title,\n description: blog.data.description,\n openGraph: {\n images: images,\n type: \"article\",\n authors: blog.data.author && [\n `${opinlyConfig.imagesPrefix}/authors/${blog.data.author.slug}`,\n ],\n title: blog.data.title,\n },\n // keywords: [blog.data.keywords],\n\n authors: blog.data.author && [\n {\n name: blog.data.author.name,\n url: `${opinlyConfig.imagesPrefix}/authors/${blog.data.author.slug}`,\n },\n ],\n other: {},\n };\n }\n\n if (blog.type === \"author\") {\n const authorImageKey = blog.data.image?.fileKey;\n const images = authorImageKey\n ? [`${opinlyConfig.imagesPrefix}/${authorImageKey}`]\n : [];\n\n return {\n ...(parent as Metadata),\n title: blog.data.name,\n description: blog.data.bio || undefined,\n openGraph: {\n images: images.length > 0 ? images : undefined,\n title: blog.data.name,\n description: blog.data.bio || undefined,\n },\n };\n }\n\n if (blog.type === \"authors\") {\n return {\n ...(parent as Metadata),\n title: `${opinlyConfig.siteName} Blog - Authors`,\n description: `Browse all authors on the ${opinlyConfig.siteName} Blog`,\n openGraph: {\n title: `${opinlyConfig.siteName} Blog - Authors`,\n description: `Browse all authors on the ${opinlyConfig.siteName} Blog`,\n },\n };\n }\n\n if (blog.type === \"folder\") {\n return {\n ...(parent as Metadata),\n title: `${opinlyConfig.siteName} Blog - Folder: ${blog.data.name}`,\n description: blog.data.description || undefined,\n openGraph: {\n title: `${opinlyConfig.siteName} Blog - Folder: ${blog.data.name}`,\n description: blog.data.description || undefined,\n },\n };\n }\n\n return parent as Metadata;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,wBAA6B;AAEtB,MAAM,yBAAyB,OACpC,QACA,QACA,WACsB;AACtB,QAAM,OAAO,MAAM,OAAO,QAAQ,KAAK,MAAM;AAE7C,MAAI,KAAK,SAAS,aAAa;AAC7B,WAAO;AAAA,EACT;AAEA,QAAM,kBAAkB,MAAM,QAAQ,WAAW,UAAU,CAAC;AAE5D,MAAI,KAAK,SAAS,QAAQ;AACxB,WAAO;AAAA,MACL,GAAI;AAAA,MACJ,OAAO,GAAG,+BAAa,QAAQ;AAAA,MAC/B,aAAa,wCAAwC,+BAAa,QAAQ;AAAA,MAC1E,WAAW;AAAA,QACT,OAAO,GAAG,+BAAa,QAAQ;AAAA,QAC/B,aAAa,wCAAwC,+BAAa,QAAQ;AAAA,MAC5E;AAAA,IACF;AAAA,EACF;AAEA,MAAI,KAAK,SAAS,QAAQ;AACxB,UAAM,oBAAoB,KAAK,MAAM,WAAW;AAEhD,UAAM,SAAS,oBACX,CAAC,GAAG,+BAAa,YAAY,IAAI,iBAAiB,IAAI,GAAG,cAAc,IACvE;AAEJ,WAAO;AAAA,MACL,GAAI;AAAA,MACJ,OAAO,KAAK,KAAK;AAAA,MACjB,aAAa,KAAK,KAAK;AAAA,MACvB,WAAW;AAAA,QACT;AAAA,QACA,MAAM;AAAA,QACN,SAAS,KAAK,KAAK,UAAU;AAAA,UAC3B,GAAG,+BAAa,YAAY,YAAY,KAAK,KAAK,OAAO,IAAI;AAAA,QAC/D;AAAA,QACA,OAAO,KAAK,KAAK;AAAA,MACnB;AAAA;AAAA,MAGA,SAAS,KAAK,KAAK,UAAU;AAAA,QAC3B;AAAA,UACE,MAAM,KAAK,KAAK,OAAO;AAAA,UACvB,KAAK,GAAG,+BAAa,YAAY,YAAY,KAAK,KAAK,OAAO,IAAI;AAAA,QACpE;AAAA,MACF;AAAA,MACA,OAAO,CAAC;AAAA,IACV;AAAA,EACF;AAEA,MAAI,KAAK,SAAS,UAAU;AAC1B,UAAM,iBAAiB,KAAK,KAAK,OAAO;AACxC,UAAM,SAAS,iBACX,CAAC,GAAG,+BAAa,YAAY,IAAI,cAAc,EAAE,IACjD,CAAC;AAEL,WAAO;AAAA,MACL,GAAI;AAAA,MACJ,OAAO,KAAK,KAAK;AAAA,MACjB,aAAa,KAAK,KAAK,OAAO;AAAA,MAC9B,WAAW;AAAA,QACT,QAAQ,OAAO,SAAS,IAAI,SAAS;AAAA,QACrC,OAAO,KAAK,KAAK;AAAA,QACjB,aAAa,KAAK,KAAK,OAAO;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AAEA,MAAI,KAAK,SAAS,WAAW;AAC3B,WAAO;AAAA,MACL,GAAI;AAAA,MACJ,OAAO,GAAG,+BAAa,QAAQ;AAAA,MAC/B,aAAa,6BAA6B,+BAAa,QAAQ;AAAA,MAC/D,WAAW;AAAA,QACT,OAAO,GAAG,+BAAa,QAAQ;AAAA,QAC/B,aAAa,6BAA6B,+BAAa,QAAQ;AAAA,MACjE;AAAA,IACF;AAAA,EACF;AAEA,MAAI,KAAK,SAAS,UAAU;AAC1B,WAAO;AAAA,MACL,GAAI;AAAA,MACJ,OAAO,GAAG,+BAAa,QAAQ,mBAAmB,KAAK,KAAK,IAAI;AAAA,MAChE,aAAa,KAAK,KAAK,eAAe;AAAA,MACtC,WAAW;AAAA,QACT,OAAO,GAAG,+BAAa,QAAQ,mBAAmB,KAAK,KAAK,IAAI;AAAA,QAChE,aAAa,KAAK,KAAK,eAAe;AAAA,MACxC;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
|
|
@@ -5,6 +5,17 @@ const generateOpinlyMetadata = async (client, params, parent) => {
|
|
|
5
5
|
return parent;
|
|
6
6
|
}
|
|
7
7
|
const previousImages = (await parent).openGraph?.images || [];
|
|
8
|
+
if (blog.type === "home") {
|
|
9
|
+
return {
|
|
10
|
+
...parent,
|
|
11
|
+
title: `${opinlyConfig.siteName} Blog`,
|
|
12
|
+
description: `Explore the latest articles from the ${opinlyConfig.siteName} Blog`,
|
|
13
|
+
openGraph: {
|
|
14
|
+
title: `${opinlyConfig.siteName} Blog`,
|
|
15
|
+
description: `Explore the latest articles from the ${opinlyConfig.siteName} Blog`
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
}
|
|
8
19
|
if (blog.type === "post") {
|
|
9
20
|
const openGraphImageKey = blog.data?.titleFile?.fileKey;
|
|
10
21
|
const images = openGraphImageKey ? [`${opinlyConfig.imagesPrefix}/${openGraphImageKey}`, ...previousImages] : previousImages;
|
|
@@ -30,6 +41,42 @@ const generateOpinlyMetadata = async (client, params, parent) => {
|
|
|
30
41
|
other: {}
|
|
31
42
|
};
|
|
32
43
|
}
|
|
44
|
+
if (blog.type === "author") {
|
|
45
|
+
const authorImageKey = blog.data.image?.fileKey;
|
|
46
|
+
const images = authorImageKey ? [`${opinlyConfig.imagesPrefix}/${authorImageKey}`] : [];
|
|
47
|
+
return {
|
|
48
|
+
...parent,
|
|
49
|
+
title: blog.data.name,
|
|
50
|
+
description: blog.data.bio || void 0,
|
|
51
|
+
openGraph: {
|
|
52
|
+
images: images.length > 0 ? images : void 0,
|
|
53
|
+
title: blog.data.name,
|
|
54
|
+
description: blog.data.bio || void 0
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
if (blog.type === "authors") {
|
|
59
|
+
return {
|
|
60
|
+
...parent,
|
|
61
|
+
title: `${opinlyConfig.siteName} Blog - Authors`,
|
|
62
|
+
description: `Browse all authors on the ${opinlyConfig.siteName} Blog`,
|
|
63
|
+
openGraph: {
|
|
64
|
+
title: `${opinlyConfig.siteName} Blog - Authors`,
|
|
65
|
+
description: `Browse all authors on the ${opinlyConfig.siteName} Blog`
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
if (blog.type === "folder") {
|
|
70
|
+
return {
|
|
71
|
+
...parent,
|
|
72
|
+
title: `${opinlyConfig.siteName} Blog - Folder: ${blog.data.name}`,
|
|
73
|
+
description: blog.data.description || void 0,
|
|
74
|
+
openGraph: {
|
|
75
|
+
title: `${opinlyConfig.siteName} Blog - Folder: ${blog.data.name}`,
|
|
76
|
+
description: blog.data.description || void 0
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
}
|
|
33
80
|
return parent;
|
|
34
81
|
};
|
|
35
82
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/generate-metadata.ts"],"sourcesContent":["import { Opinly, OpinlyPagePropsPromisified } from \"@opinly/backend\";\nimport type { Metadata, ResolvingMetadata } from \"next\";\nimport { opinlyConfig } from \"./sdk-config\";\n\nexport const generateOpinlyMetadata = async (\n client: Opinly,\n params: OpinlyPagePropsPromisified,\n parent: ResolvingMetadata\n): Promise<Metadata> => {\n const blog = await client.content.blog(params);\n\n if (blog.type === \"not-found\") {\n return parent as Metadata;\n }\n\n const previousImages = (await parent).openGraph?.images || [];\n\n if (blog.type === \"post\") {\n const openGraphImageKey = blog.data?.titleFile?.fileKey;\n\n const images = openGraphImageKey\n ? [`${opinlyConfig.imagesPrefix}/${openGraphImageKey}`, ...previousImages]\n : previousImages;\n\n return {\n ...(parent as Metadata),\n title: blog.data.title,\n description: blog.data.description,\n openGraph: {\n images: images,\n type: \"article\",\n authors: blog.data.author && [\n `${opinlyConfig.imagesPrefix}/authors/${blog.data.author.slug}`,\n ],\n title: blog.data.title,\n },\n // keywords: [blog.data.keywords],\n\n authors: blog.data.author && [\n {\n name: blog.data.author.name,\n url: `${opinlyConfig.imagesPrefix}/authors/${blog.data.author.slug}`,\n },\n ],\n other: {},\n };\n }\n\n return parent as Metadata;\n};\n"],"mappings":"AAEA,SAAS,oBAAoB;AAEtB,MAAM,yBAAyB,OACpC,QACA,QACA,WACsB;AACtB,QAAM,OAAO,MAAM,OAAO,QAAQ,KAAK,MAAM;AAE7C,MAAI,KAAK,SAAS,aAAa;AAC7B,WAAO;AAAA,EACT;AAEA,QAAM,kBAAkB,MAAM,QAAQ,WAAW,UAAU,CAAC;AAE5D,MAAI,KAAK,SAAS,QAAQ;AACxB,UAAM,oBAAoB,KAAK,MAAM,WAAW;AAEhD,UAAM,SAAS,oBACX,CAAC,GAAG,aAAa,YAAY,IAAI,iBAAiB,IAAI,GAAG,cAAc,IACvE;AAEJ,WAAO;AAAA,MACL,GAAI;AAAA,MACJ,OAAO,KAAK,KAAK;AAAA,MACjB,aAAa,KAAK,KAAK;AAAA,MACvB,WAAW;AAAA,QACT;AAAA,QACA,MAAM;AAAA,QACN,SAAS,KAAK,KAAK,UAAU;AAAA,UAC3B,GAAG,aAAa,YAAY,YAAY,KAAK,KAAK,OAAO,IAAI;AAAA,QAC/D;AAAA,QACA,OAAO,KAAK,KAAK;AAAA,MACnB;AAAA;AAAA,MAGA,SAAS,KAAK,KAAK,UAAU;AAAA,QAC3B;AAAA,UACE,MAAM,KAAK,KAAK,OAAO;AAAA,UACvB,KAAK,GAAG,aAAa,YAAY,YAAY,KAAK,KAAK,OAAO,IAAI;AAAA,QACpE;AAAA,MACF;AAAA,MACA,OAAO,CAAC;AAAA,IACV;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/generate-metadata.ts"],"sourcesContent":["import { Opinly, OpinlyPagePropsPromisified } from \"@opinly/backend\";\nimport type { Metadata, ResolvingMetadata } from \"next\";\nimport { opinlyConfig } from \"./sdk-config\";\n\nexport const generateOpinlyMetadata = async (\n client: Opinly,\n params: OpinlyPagePropsPromisified,\n parent: ResolvingMetadata\n): Promise<Metadata> => {\n const blog = await client.content.blog(params);\n\n if (blog.type === \"not-found\") {\n return parent as Metadata;\n }\n\n const previousImages = (await parent).openGraph?.images || [];\n\n if (blog.type === \"home\") {\n return {\n ...(parent as Metadata),\n title: `${opinlyConfig.siteName} Blog`,\n description: `Explore the latest articles from the ${opinlyConfig.siteName} Blog`,\n openGraph: {\n title: `${opinlyConfig.siteName} Blog`,\n description: `Explore the latest articles from the ${opinlyConfig.siteName} Blog`,\n },\n };\n }\n\n if (blog.type === \"post\") {\n const openGraphImageKey = blog.data?.titleFile?.fileKey;\n\n const images = openGraphImageKey\n ? [`${opinlyConfig.imagesPrefix}/${openGraphImageKey}`, ...previousImages]\n : previousImages;\n\n return {\n ...(parent as Metadata),\n title: blog.data.title,\n description: blog.data.description,\n openGraph: {\n images: images,\n type: \"article\",\n authors: blog.data.author && [\n `${opinlyConfig.imagesPrefix}/authors/${blog.data.author.slug}`,\n ],\n title: blog.data.title,\n },\n // keywords: [blog.data.keywords],\n\n authors: blog.data.author && [\n {\n name: blog.data.author.name,\n url: `${opinlyConfig.imagesPrefix}/authors/${blog.data.author.slug}`,\n },\n ],\n other: {},\n };\n }\n\n if (blog.type === \"author\") {\n const authorImageKey = blog.data.image?.fileKey;\n const images = authorImageKey\n ? [`${opinlyConfig.imagesPrefix}/${authorImageKey}`]\n : [];\n\n return {\n ...(parent as Metadata),\n title: blog.data.name,\n description: blog.data.bio || undefined,\n openGraph: {\n images: images.length > 0 ? images : undefined,\n title: blog.data.name,\n description: blog.data.bio || undefined,\n },\n };\n }\n\n if (blog.type === \"authors\") {\n return {\n ...(parent as Metadata),\n title: `${opinlyConfig.siteName} Blog - Authors`,\n description: `Browse all authors on the ${opinlyConfig.siteName} Blog`,\n openGraph: {\n title: `${opinlyConfig.siteName} Blog - Authors`,\n description: `Browse all authors on the ${opinlyConfig.siteName} Blog`,\n },\n };\n }\n\n if (blog.type === \"folder\") {\n return {\n ...(parent as Metadata),\n title: `${opinlyConfig.siteName} Blog - Folder: ${blog.data.name}`,\n description: blog.data.description || undefined,\n openGraph: {\n title: `${opinlyConfig.siteName} Blog - Folder: ${blog.data.name}`,\n description: blog.data.description || undefined,\n },\n };\n }\n\n return parent as Metadata;\n};\n"],"mappings":"AAEA,SAAS,oBAAoB;AAEtB,MAAM,yBAAyB,OACpC,QACA,QACA,WACsB;AACtB,QAAM,OAAO,MAAM,OAAO,QAAQ,KAAK,MAAM;AAE7C,MAAI,KAAK,SAAS,aAAa;AAC7B,WAAO;AAAA,EACT;AAEA,QAAM,kBAAkB,MAAM,QAAQ,WAAW,UAAU,CAAC;AAE5D,MAAI,KAAK,SAAS,QAAQ;AACxB,WAAO;AAAA,MACL,GAAI;AAAA,MACJ,OAAO,GAAG,aAAa,QAAQ;AAAA,MAC/B,aAAa,wCAAwC,aAAa,QAAQ;AAAA,MAC1E,WAAW;AAAA,QACT,OAAO,GAAG,aAAa,QAAQ;AAAA,QAC/B,aAAa,wCAAwC,aAAa,QAAQ;AAAA,MAC5E;AAAA,IACF;AAAA,EACF;AAEA,MAAI,KAAK,SAAS,QAAQ;AACxB,UAAM,oBAAoB,KAAK,MAAM,WAAW;AAEhD,UAAM,SAAS,oBACX,CAAC,GAAG,aAAa,YAAY,IAAI,iBAAiB,IAAI,GAAG,cAAc,IACvE;AAEJ,WAAO;AAAA,MACL,GAAI;AAAA,MACJ,OAAO,KAAK,KAAK;AAAA,MACjB,aAAa,KAAK,KAAK;AAAA,MACvB,WAAW;AAAA,QACT;AAAA,QACA,MAAM;AAAA,QACN,SAAS,KAAK,KAAK,UAAU;AAAA,UAC3B,GAAG,aAAa,YAAY,YAAY,KAAK,KAAK,OAAO,IAAI;AAAA,QAC/D;AAAA,QACA,OAAO,KAAK,KAAK;AAAA,MACnB;AAAA;AAAA,MAGA,SAAS,KAAK,KAAK,UAAU;AAAA,QAC3B;AAAA,UACE,MAAM,KAAK,KAAK,OAAO;AAAA,UACvB,KAAK,GAAG,aAAa,YAAY,YAAY,KAAK,KAAK,OAAO,IAAI;AAAA,QACpE;AAAA,MACF;AAAA,MACA,OAAO,CAAC;AAAA,IACV;AAAA,EACF;AAEA,MAAI,KAAK,SAAS,UAAU;AAC1B,UAAM,iBAAiB,KAAK,KAAK,OAAO;AACxC,UAAM,SAAS,iBACX,CAAC,GAAG,aAAa,YAAY,IAAI,cAAc,EAAE,IACjD,CAAC;AAEL,WAAO;AAAA,MACL,GAAI;AAAA,MACJ,OAAO,KAAK,KAAK;AAAA,MACjB,aAAa,KAAK,KAAK,OAAO;AAAA,MAC9B,WAAW;AAAA,QACT,QAAQ,OAAO,SAAS,IAAI,SAAS;AAAA,QACrC,OAAO,KAAK,KAAK;AAAA,QACjB,aAAa,KAAK,KAAK,OAAO;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AAEA,MAAI,KAAK,SAAS,WAAW;AAC3B,WAAO;AAAA,MACL,GAAI;AAAA,MACJ,OAAO,GAAG,aAAa,QAAQ;AAAA,MAC/B,aAAa,6BAA6B,aAAa,QAAQ;AAAA,MAC/D,WAAW;AAAA,QACT,OAAO,GAAG,aAAa,QAAQ;AAAA,QAC/B,aAAa,6BAA6B,aAAa,QAAQ;AAAA,MACjE;AAAA,IACF;AAAA,EACF;AAEA,MAAI,KAAK,SAAS,UAAU;AAC1B,WAAO;AAAA,MACL,GAAI;AAAA,MACJ,OAAO,GAAG,aAAa,QAAQ,mBAAmB,KAAK,KAAK,IAAI;AAAA,MAChE,aAAa,KAAK,KAAK,eAAe;AAAA,MACtC,WAAW;AAAA,QACT,OAAO,GAAG,aAAa,QAAQ,mBAAmB,KAAK,KAAK,IAAI;AAAA,QAChE,aAAa,KAAK,KAAK,eAAe;AAAA,MACxC;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opinly/next",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.26",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"private": false,
|
|
6
6
|
"main": "dist/index.cjs",
|
|
@@ -9,23 +9,23 @@
|
|
|
9
9
|
"devDependencies": {
|
|
10
10
|
"@tsconfig/next": "^2.0.3",
|
|
11
11
|
"@types/node": "^20.0.0",
|
|
12
|
-
"@types/react": "19.
|
|
13
|
-
"@types/react-dom": "19.
|
|
12
|
+
"@types/react": "19.2.2",
|
|
13
|
+
"@types/react-dom": "19.2.2",
|
|
14
14
|
"typescript": "^5.3.3"
|
|
15
15
|
},
|
|
16
16
|
"peerDependencies": {
|
|
17
17
|
"@tsconfig/next": "^2.0.3",
|
|
18
18
|
"autoprefixer": "^10.0.0",
|
|
19
|
-
"next": "^15.0.0 || ^
|
|
19
|
+
"next": "^15.0.0 || ^16.0.0",
|
|
20
20
|
"postcss": "^8.0.0",
|
|
21
21
|
"react": "^19.0.0 || ^18.0.0",
|
|
22
22
|
"react-dom": "^19.0.0 || ^18.0.0",
|
|
23
|
-
"tailwindcss": "^4.0.0"
|
|
23
|
+
"tailwindcss": "^4.0.0 || ^3.0.0"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@tiptap/core": "^2.12.0",
|
|
27
27
|
"clsx": "^2.1.1",
|
|
28
|
-
"lucide-react": "^0.
|
|
28
|
+
"lucide-react": "^0.553.0",
|
|
29
29
|
"next-seo": "^6.8.0",
|
|
30
30
|
"react-syntax-highlighter": "^15.6.1",
|
|
31
31
|
"schema-dts": "^1.1.5",
|