@opinly/next 0.1.26 → 1.0.0
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/config.cjs +16 -7
- package/dist/config.cjs.map +1 -1
- package/dist/config.d.cts +7 -2
- package/dist/config.d.ts +7 -2
- package/dist/config.js +16 -7
- package/dist/config.js.map +1 -1
- package/dist/index.cjs +33 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +12 -6
- package/dist/index.d.ts +12 -6
- package/dist/index.js +26 -1
- package/dist/index.js.map +1 -1
- package/dist/json-ld.cjs +61 -0
- package/dist/json-ld.cjs.map +1 -0
- package/dist/json-ld.d.cts +17 -0
- package/dist/json-ld.d.ts +17 -0
- package/dist/json-ld.js +38 -0
- package/dist/json-ld.js.map +1 -0
- package/dist/utils/generate-metadata.cjs +23 -79
- package/dist/utils/generate-metadata.cjs.map +1 -1
- package/dist/utils/generate-metadata.d.cts +11 -2
- package/dist/utils/generate-metadata.d.ts +11 -2
- package/dist/utils/generate-metadata.js +23 -79
- package/dist/utils/generate-metadata.js.map +1 -1
- package/dist/utils/generate-sitemap-xml.cjs.map +1 -1
- package/dist/utils/generate-sitemap-xml.d.cts +5 -3
- package/dist/utils/generate-sitemap-xml.d.ts +5 -3
- package/dist/utils/generate-sitemap-xml.js.map +1 -1
- package/dist/utils/sdk-config.cjs +6 -2
- package/dist/utils/sdk-config.cjs.map +1 -1
- package/dist/utils/sdk-config.d.cts +4 -0
- package/dist/utils/sdk-config.d.ts +4 -0
- package/dist/utils/sdk-config.js +6 -2
- package/dist/utils/sdk-config.js.map +1 -1
- package/package.json +10 -19
- package/dist/components/author-page/_helpers/json-ld.cjs +0 -44
- package/dist/components/author-page/_helpers/json-ld.cjs.map +0 -1
- package/dist/components/author-page/_helpers/json-ld.d.cts +0 -8
- package/dist/components/author-page/_helpers/json-ld.d.ts +0 -8
- package/dist/components/author-page/_helpers/json-ld.js +0 -20
- package/dist/components/author-page/_helpers/json-ld.js.map +0 -1
- package/dist/components/author-page/index.cjs +0 -104
- package/dist/components/author-page/index.cjs.map +0 -1
- package/dist/components/author-page/index.d.cts +0 -10
- package/dist/components/author-page/index.d.ts +0 -10
- package/dist/components/author-page/index.js +0 -70
- package/dist/components/author-page/index.js.map +0 -1
- package/dist/components/authors-page/_helpers/json-ld.cjs +0 -53
- package/dist/components/authors-page/_helpers/json-ld.cjs.map +0 -1
- package/dist/components/authors-page/_helpers/json-ld.d.cts +0 -8
- package/dist/components/authors-page/_helpers/json-ld.d.ts +0 -8
- package/dist/components/authors-page/_helpers/json-ld.js +0 -29
- package/dist/components/authors-page/_helpers/json-ld.js.map +0 -1
- package/dist/components/authors-page/index.cjs +0 -121
- package/dist/components/authors-page/index.cjs.map +0 -1
- package/dist/components/authors-page/index.d.cts +0 -10
- package/dist/components/authors-page/index.d.ts +0 -10
- package/dist/components/authors-page/index.js +0 -87
- package/dist/components/authors-page/index.js.map +0 -1
- package/dist/components/blog-post/_components/content.cjs +0 -157
- package/dist/components/blog-post/_components/content.cjs.map +0 -1
- package/dist/components/blog-post/_components/content.d.cts +0 -10
- package/dist/components/blog-post/_components/content.d.ts +0 -10
- package/dist/components/blog-post/_components/content.js +0 -123
- package/dist/components/blog-post/_components/content.js.map +0 -1
- package/dist/components/blog-post/_components/faq.cjs +0 -39
- package/dist/components/blog-post/_components/faq.cjs.map +0 -1
- package/dist/components/blog-post/_components/faq.d.cts +0 -9
- package/dist/components/blog-post/_components/faq.d.ts +0 -9
- package/dist/components/blog-post/_components/faq.js +0 -15
- package/dist/components/blog-post/_components/faq.js.map +0 -1
- package/dist/components/blog-post/_components/share.cjs +0 -100
- package/dist/components/blog-post/_components/share.cjs.map +0 -1
- package/dist/components/blog-post/_components/share.d.cts +0 -9
- package/dist/components/blog-post/_components/share.d.ts +0 -9
- package/dist/components/blog-post/_components/share.js +0 -66
- package/dist/components/blog-post/_components/share.js.map +0 -1
- package/dist/components/blog-post/_components/table-of-contents.cjs +0 -111
- package/dist/components/blog-post/_components/table-of-contents.cjs.map +0 -1
- package/dist/components/blog-post/_components/table-of-contents.d.cts +0 -14
- package/dist/components/blog-post/_components/table-of-contents.d.ts +0 -14
- package/dist/components/blog-post/_components/table-of-contents.js +0 -77
- package/dist/components/blog-post/_components/table-of-contents.js.map +0 -1
- package/dist/components/blog-post/_helpers/calc-reading-time.cjs +0 -2
- package/dist/components/blog-post/_helpers/calc-reading-time.cjs.map +0 -1
- package/dist/components/blog-post/_helpers/calc-reading-time.d.cts +0 -2
- package/dist/components/blog-post/_helpers/calc-reading-time.d.ts +0 -2
- package/dist/components/blog-post/_helpers/calc-reading-time.js +0 -1
- package/dist/components/blog-post/_helpers/calc-reading-time.js.map +0 -1
- package/dist/components/blog-post/_helpers/extract-headings.cjs +0 -45
- package/dist/components/blog-post/_helpers/extract-headings.cjs.map +0 -1
- package/dist/components/blog-post/_helpers/extract-headings.d.cts +0 -9
- package/dist/components/blog-post/_helpers/extract-headings.d.ts +0 -9
- package/dist/components/blog-post/_helpers/extract-headings.js +0 -21
- package/dist/components/blog-post/_helpers/extract-headings.js.map +0 -1
- package/dist/components/blog-post/_helpers/json-ld.cjs +0 -162
- package/dist/components/blog-post/_helpers/json-ld.cjs.map +0 -1
- package/dist/components/blog-post/_helpers/json-ld.d.cts +0 -15
- package/dist/components/blog-post/_helpers/json-ld.d.ts +0 -15
- package/dist/components/blog-post/_helpers/json-ld.js +0 -135
- package/dist/components/blog-post/_helpers/json-ld.js.map +0 -1
- package/dist/components/blog-post/_helpers/reading-time.cjs +0 -50
- package/dist/components/blog-post/_helpers/reading-time.cjs.map +0 -1
- package/dist/components/blog-post/_helpers/reading-time.d.cts +0 -6
- package/dist/components/blog-post/_helpers/reading-time.d.ts +0 -6
- package/dist/components/blog-post/_helpers/reading-time.js +0 -25
- package/dist/components/blog-post/_helpers/reading-time.js.map +0 -1
- package/dist/components/blog-post/_types/blog-post.cjs +0 -17
- package/dist/components/blog-post/_types/blog-post.cjs.map +0 -1
- package/dist/components/blog-post/_types/blog-post.d.cts +0 -7
- package/dist/components/blog-post/_types/blog-post.d.ts +0 -7
- package/dist/components/blog-post/_types/blog-post.js +0 -1
- package/dist/components/blog-post/_types/blog-post.js.map +0 -1
- package/dist/components/blog-post/_types/class-names.cjs +0 -17
- package/dist/components/blog-post/_types/class-names.cjs.map +0 -1
- package/dist/components/blog-post/_types/class-names.d.cts +0 -12
- package/dist/components/blog-post/_types/class-names.d.ts +0 -12
- package/dist/components/blog-post/_types/class-names.js +0 -1
- package/dist/components/blog-post/_types/class-names.js.map +0 -1
- package/dist/components/blog-post/index.cjs +0 -133
- package/dist/components/blog-post/index.cjs.map +0 -1
- package/dist/components/blog-post/index.d.cts +0 -15
- package/dist/components/blog-post/index.d.ts +0 -15
- package/dist/components/blog-post/index.js +0 -99
- package/dist/components/blog-post/index.js.map +0 -1
- package/dist/components/bread-crumbs.cjs +0 -60
- package/dist/components/bread-crumbs.cjs.map +0 -1
- package/dist/components/bread-crumbs.d.cts +0 -10
- package/dist/components/bread-crumbs.d.ts +0 -10
- package/dist/components/bread-crumbs.js +0 -26
- package/dist/components/bread-crumbs.js.map +0 -1
- package/dist/components/folder-page/_helpers/json-ld.cjs +0 -43
- package/dist/components/folder-page/_helpers/json-ld.cjs.map +0 -1
- package/dist/components/folder-page/_helpers/json-ld.d.cts +0 -8
- package/dist/components/folder-page/_helpers/json-ld.d.ts +0 -8
- package/dist/components/folder-page/_helpers/json-ld.js +0 -19
- package/dist/components/folder-page/_helpers/json-ld.js.map +0 -1
- package/dist/components/folder-page/index.cjs +0 -84
- package/dist/components/folder-page/index.cjs.map +0 -1
- package/dist/components/folder-page/index.d.cts +0 -10
- package/dist/components/folder-page/index.d.ts +0 -10
- package/dist/components/folder-page/index.js +0 -60
- package/dist/components/folder-page/index.js.map +0 -1
- package/dist/components/home-page/_helpers/json-ld.cjs +0 -43
- package/dist/components/home-page/_helpers/json-ld.cjs.map +0 -1
- package/dist/components/home-page/_helpers/json-ld.d.cts +0 -3
- package/dist/components/home-page/_helpers/json-ld.d.ts +0 -3
- package/dist/components/home-page/_helpers/json-ld.js +0 -19
- package/dist/components/home-page/_helpers/json-ld.js.map +0 -1
- package/dist/components/home-page/folders.cjs +0 -108
- package/dist/components/home-page/folders.cjs.map +0 -1
- package/dist/components/home-page/folders.d.cts +0 -11
- package/dist/components/home-page/folders.d.ts +0 -11
- package/dist/components/home-page/folders.js +0 -73
- package/dist/components/home-page/folders.js.map +0 -1
- package/dist/components/home-page/index.cjs +0 -50
- package/dist/components/home-page/index.cjs.map +0 -1
- package/dist/components/home-page/index.d.cts +0 -14
- package/dist/components/home-page/index.d.ts +0 -14
- package/dist/components/home-page/index.js +0 -26
- package/dist/components/home-page/index.js.map +0 -1
- package/dist/components/home-page/pagination.cjs +0 -97
- package/dist/components/home-page/pagination.cjs.map +0 -1
- package/dist/components/home-page/pagination.d.cts +0 -9
- package/dist/components/home-page/pagination.d.ts +0 -9
- package/dist/components/home-page/pagination.js +0 -63
- package/dist/components/home-page/pagination.js.map +0 -1
- package/dist/components/home-page/top-posts.cjs +0 -35
- package/dist/components/home-page/top-posts.cjs.map +0 -1
- package/dist/components/home-page/top-posts.d.cts +0 -10
- package/dist/components/home-page/top-posts.d.ts +0 -10
- package/dist/components/home-page/top-posts.js +0 -11
- package/dist/components/home-page/top-posts.js.map +0 -1
- package/dist/components/json-ld.cjs +0 -92
- package/dist/components/json-ld.cjs.map +0 -1
- package/dist/components/json-ld.d.cts +0 -13
- package/dist/components/json-ld.d.ts +0 -13
- package/dist/components/json-ld.js +0 -57
- package/dist/components/json-ld.js.map +0 -1
- package/dist/components/opinly-blog.cjs +0 -57
- package/dist/components/opinly-blog.cjs.map +0 -1
- package/dist/components/opinly-blog.d.cts +0 -15
- package/dist/components/opinly-blog.d.ts +0 -15
- package/dist/components/opinly-blog.js +0 -33
- package/dist/components/opinly-blog.js.map +0 -1
- package/dist/components/post-preview.cjs +0 -114
- package/dist/components/post-preview.cjs.map +0 -1
- package/dist/components/post-preview.d.cts +0 -10
- package/dist/components/post-preview.d.ts +0 -10
- package/dist/components/post-preview.js +0 -79
- package/dist/components/post-preview.js.map +0 -1
- package/dist/pages/index.cjs +0 -23
- package/dist/pages/index.cjs.map +0 -1
- package/dist/pages/index.d.cts +0 -3
- package/dist/pages/index.d.ts +0 -3
- package/dist/pages/index.js +0 -2
- package/dist/pages/index.js.map +0 -1
- package/dist/pages/opinly-blog-pages.cjs +0 -127
- package/dist/pages/opinly-blog-pages.cjs.map +0 -1
- package/dist/pages/opinly-blog-pages.d.cts +0 -9
- package/dist/pages/opinly-blog-pages.d.ts +0 -9
- package/dist/pages/opinly-blog-pages.js +0 -103
- package/dist/pages/opinly-blog-pages.js.map +0 -1
- package/dist/utils/json-ld.cjs +0 -2
- package/dist/utils/json-ld.cjs.map +0 -1
- package/dist/utils/json-ld.d.cts +0 -2
- package/dist/utils/json-ld.d.ts +0 -2
- package/dist/utils/json-ld.js +0 -1
- package/dist/utils/json-ld.js.map +0 -1
package/dist/config.cjs
CHANGED
|
@@ -41,6 +41,8 @@ const opinlyOptionsSchema = import_zod.z.object({
|
|
|
41
41
|
message: "siteUrl must be a valid URL"
|
|
42
42
|
}),
|
|
43
43
|
unoptimizedImages: import_zod.z.boolean().optional(),
|
|
44
|
+
categoryPrefix: import_zod.z.string().optional(),
|
|
45
|
+
authorPrefix: import_zod.z.string().optional(),
|
|
44
46
|
cdnDomain: import_zod.z.string({
|
|
45
47
|
description: "INTERNAL USE ONLY: The domain of the CDN. If not provided, the default domain will be used."
|
|
46
48
|
}).url({
|
|
@@ -103,19 +105,26 @@ function addEnvVars(userNextConfig, opinlyOptions) {
|
|
|
103
105
|
OPINLY_SITE_NAME: opinlyOptions.companyName,
|
|
104
106
|
OPINLY_SITE_URL: opinlyOptions.siteUrl,
|
|
105
107
|
OPINLY_UNOPTIMIZED_IMAGES: opinlyOptions.unoptimizedImages ? "true" : void 0,
|
|
106
|
-
OPINLY_PAGES_ROUTER: opinlyOptions.pagesRouter ? "true" : void 0
|
|
108
|
+
OPINLY_PAGES_ROUTER: opinlyOptions.pagesRouter ? "true" : void 0,
|
|
109
|
+
OPINLY_CATEGORY_PREFIX: opinlyOptions.categoryPrefix,
|
|
110
|
+
OPINLY_AUTHOR_PREFIX: opinlyOptions.authorPrefix
|
|
107
111
|
};
|
|
108
112
|
userNextConfig.env = {
|
|
109
113
|
...userNextConfig.env || {},
|
|
110
114
|
...opinlyEnvVars
|
|
111
115
|
};
|
|
112
116
|
}
|
|
113
|
-
const withOpinlyConfig = (opinlyOptions) => (
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
117
|
+
const withOpinlyConfig = (opinlyOptions) => (
|
|
118
|
+
// Generic over the config type so this composes with any Next version's
|
|
119
|
+
// `NextConfig` (the consumer's next may differ from the one this package was
|
|
120
|
+
// built against). We only read/write `env` and `rewrites` internally.
|
|
121
|
+
(nextConfig) => {
|
|
122
|
+
validateOpinlyOptions(opinlyOptions);
|
|
123
|
+
addEnvVars(nextConfig, opinlyOptions);
|
|
124
|
+
processRewrites(nextConfig, opinlyOptions);
|
|
125
|
+
return nextConfig;
|
|
126
|
+
}
|
|
127
|
+
);
|
|
119
128
|
// Annotate the CommonJS export names for ESM import in node:
|
|
120
129
|
0 && (module.exports = {
|
|
121
130
|
withOpinlyConfig
|
package/dist/config.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config.ts"],"sourcesContent":["import { NextConfig } from \"next\";\nimport { Rewrite } from \"next/dist/lib/load-custom-routes\";\nimport type { OpinlyEnvVars } from \"./utils/sdk-config\";\nimport { z } from \"zod\";\n\ninterface WithOpinlyOptions {\n imagesPath: `/${string}`;\n blogPath: `/${string}`;\n companyName: string;\n cdnNamespace: string;\n siteUrl: string;\n unoptimizedImages?: boolean;\n}\n\ntype ResolvedRewrites = ReturnType<\n NonNullable<Awaited<NextConfig[\"rewrites\"]>>\n>;\n\nconst opinlyOptionsSchema = z.object({\n imagesPath: z\n .string({})\n .refine(\n (val) => val.startsWith(\"/\") || z.string().url().safeParse(val).success,\n {\n message: \"imagesPath must start with a leading slash (e.g. '/images')\",\n }\n ),\n blogPath: z.string({}).startsWith(\"/\", {\n message: \"blogPath must start with a leading slash i.e. `/blog`\",\n }),\n companyName: z.string({\n required_error: \"companyName is required\",\n invalid_type_error: \"companyName must be a string\",\n }),\n cdnNamespace: z\n .string()\n .min(21, \"CDN namespace must be 21 characters long\")\n .max(21, \"CDN namespace must be 21 characters long\"),\n siteUrl: z.string().url({\n message: \"siteUrl must be a valid URL\",\n }),\n unoptimizedImages: z.boolean().optional(),\n cdnDomain: z\n .string({\n description:\n \"INTERNAL USE ONLY: The domain of the CDN. If not provided, the default domain will be used.\",\n })\n .url({\n message: \"cdnDomain must be a valid URL\",\n })\n .optional(),\n pagesRouter: z.boolean().optional(),\n});\n\ntype OpinlyOptions = z.infer<typeof opinlyOptionsSchema>;\n\nconst validateOpinlyOptions = (opinlyOptions: OpinlyOptions) => {\n if (!opinlyOptions) {\n throw new Error(\n \"[@opinly/next] `opts` is required. Please provide the options object.\"\n );\n }\n\n const parsedOpinlyOptions = opinlyOptionsSchema.safeParse(opinlyOptions);\n\n if (!parsedOpinlyOptions.success) {\n throw new Error(\n `[@opinly/next] Invalid options provided in next.config.js: ${parsedOpinlyOptions.error.message}`\n );\n }\n};\n\nconst processRewrites = (\n userNextConfig: NextConfig,\n opinlyOptions: OpinlyOptions\n): void => {\n const imagesPath = opinlyOptions.imagesPath;\n\n if (!imagesPath.startsWith(\"/\")) {\n console.warn(\n `[@opinly/next] You have provided a url for imagesPath. This is only valid for internal testing and rewrites will be skipped.`\n );\n\n return;\n }\n\n const originalRewrites = userNextConfig.rewrites;\n\n userNextConfig.rewrites = async () => {\n const opinlyRewrite = {\n source: `${opinlyOptions.imagesPath}/:path*`,\n destination: `${opinlyOptions.cdnDomain || \"https://cdn.opinly.ai\"}/${\n opinlyOptions.cdnNamespace\n }/:path*`,\n };\n\n const newRewrites = [opinlyRewrite];\n\n if (opinlyOptions.pagesRouter) {\n newRewrites.push({\n source: \"/sitemap.xml\",\n destination: \"/sitemap\",\n });\n }\n\n if (typeof originalRewrites !== \"function\") {\n return newRewrites;\n }\n\n const resolvedRewrites = await originalRewrites();\n\n if (Array.isArray(resolvedRewrites)) {\n return [...resolvedRewrites, opinlyRewrite];\n } else {\n return {\n ...resolvedRewrites,\n beforeFiles: [...(resolvedRewrites.beforeFiles || []), ...newRewrites],\n };\n }\n };\n};\n\nfunction addEnvVars(userNextConfig: NextConfig, opinlyOptions: OpinlyOptions) {\n const opinlyEnvVars: OpinlyEnvVars = {\n OPINLY_IMAGES_PREFIX: opinlyOptions.imagesPath,\n OPINLY_BLOG_PREFIX: opinlyOptions.blogPath,\n OPINLY_SITE_NAME: opinlyOptions.companyName,\n OPINLY_SITE_URL: opinlyOptions.siteUrl,\n OPINLY_UNOPTIMIZED_IMAGES: opinlyOptions.unoptimizedImages\n ? \"true\"\n : undefined,\n OPINLY_PAGES_ROUTER: opinlyOptions.pagesRouter ? \"true\" : undefined,\n };\n\n userNextConfig.env = {\n ...(userNextConfig.env || {}),\n ...opinlyEnvVars,\n };\n}\n\n/**\n * Modifies the passed in Next.js configuration with image rewrites and environment variables.\n *\n * @param nextConfig A Next.js configuration object, as usually exported in `next.config.js` or `next.config.mjs`.\n * @param opinlyOptions Additional options to configure Opinly.\n * @returns The modified config to be exported\n */\nexport const withOpinlyConfig =\n (opinlyOptions: OpinlyOptions) =>\n (nextConfig:
|
|
1
|
+
{"version":3,"sources":["../src/config.ts"],"sourcesContent":["import { NextConfig } from \"next\";\nimport { Rewrite } from \"next/dist/lib/load-custom-routes\";\nimport type { OpinlyEnvVars } from \"./utils/sdk-config\";\nimport { z } from \"zod\";\n\ninterface WithOpinlyOptions {\n imagesPath: `/${string}`;\n blogPath: `/${string}`;\n companyName: string;\n cdnNamespace: string;\n siteUrl: string;\n unoptimizedImages?: boolean;\n /** URL segment categories live under (relative to blogPath). Default: bare. */\n categoryPrefix?: string;\n /** URL segment authors live under (relative to blogPath). Default: \"authors\". */\n authorPrefix?: string;\n}\n\ntype ResolvedRewrites = ReturnType<\n NonNullable<Awaited<NextConfig[\"rewrites\"]>>\n>;\n\nconst opinlyOptionsSchema = z.object({\n imagesPath: z\n .string({})\n .refine(\n (val) => val.startsWith(\"/\") || z.string().url().safeParse(val).success,\n {\n message: \"imagesPath must start with a leading slash (e.g. '/images')\",\n }\n ),\n blogPath: z.string({}).startsWith(\"/\", {\n message: \"blogPath must start with a leading slash i.e. `/blog`\",\n }),\n companyName: z.string({\n required_error: \"companyName is required\",\n invalid_type_error: \"companyName must be a string\",\n }),\n cdnNamespace: z\n .string()\n .min(21, \"CDN namespace must be 21 characters long\")\n .max(21, \"CDN namespace must be 21 characters long\"),\n siteUrl: z.string().url({\n message: \"siteUrl must be a valid URL\",\n }),\n unoptimizedImages: z.boolean().optional(),\n categoryPrefix: z.string().optional(),\n authorPrefix: z.string().optional(),\n cdnDomain: z\n .string({\n description:\n \"INTERNAL USE ONLY: The domain of the CDN. If not provided, the default domain will be used.\",\n })\n .url({\n message: \"cdnDomain must be a valid URL\",\n })\n .optional(),\n pagesRouter: z.boolean().optional(),\n});\n\ntype OpinlyOptions = z.infer<typeof opinlyOptionsSchema>;\n\nconst validateOpinlyOptions = (opinlyOptions: OpinlyOptions) => {\n if (!opinlyOptions) {\n throw new Error(\n \"[@opinly/next] `opts` is required. Please provide the options object.\"\n );\n }\n\n const parsedOpinlyOptions = opinlyOptionsSchema.safeParse(opinlyOptions);\n\n if (!parsedOpinlyOptions.success) {\n throw new Error(\n `[@opinly/next] Invalid options provided in next.config.js: ${parsedOpinlyOptions.error.message}`\n );\n }\n};\n\nconst processRewrites = (\n userNextConfig: NextConfig,\n opinlyOptions: OpinlyOptions\n): void => {\n const imagesPath = opinlyOptions.imagesPath;\n\n if (!imagesPath.startsWith(\"/\")) {\n console.warn(\n `[@opinly/next] You have provided a url for imagesPath. This is only valid for internal testing and rewrites will be skipped.`\n );\n\n return;\n }\n\n const originalRewrites = userNextConfig.rewrites;\n\n userNextConfig.rewrites = async () => {\n const opinlyRewrite = {\n source: `${opinlyOptions.imagesPath}/:path*`,\n destination: `${opinlyOptions.cdnDomain || \"https://cdn.opinly.ai\"}/${\n opinlyOptions.cdnNamespace\n }/:path*`,\n };\n\n const newRewrites = [opinlyRewrite];\n\n if (opinlyOptions.pagesRouter) {\n newRewrites.push({\n source: \"/sitemap.xml\",\n destination: \"/sitemap\",\n });\n }\n\n if (typeof originalRewrites !== \"function\") {\n return newRewrites;\n }\n\n const resolvedRewrites = await originalRewrites();\n\n if (Array.isArray(resolvedRewrites)) {\n return [...resolvedRewrites, opinlyRewrite];\n } else {\n return {\n ...resolvedRewrites,\n beforeFiles: [...(resolvedRewrites.beforeFiles || []), ...newRewrites],\n };\n }\n };\n};\n\nfunction addEnvVars(userNextConfig: NextConfig, opinlyOptions: OpinlyOptions) {\n const opinlyEnvVars: OpinlyEnvVars = {\n OPINLY_IMAGES_PREFIX: opinlyOptions.imagesPath,\n OPINLY_BLOG_PREFIX: opinlyOptions.blogPath,\n OPINLY_SITE_NAME: opinlyOptions.companyName,\n OPINLY_SITE_URL: opinlyOptions.siteUrl,\n OPINLY_UNOPTIMIZED_IMAGES: opinlyOptions.unoptimizedImages\n ? \"true\"\n : undefined,\n OPINLY_PAGES_ROUTER: opinlyOptions.pagesRouter ? \"true\" : undefined,\n OPINLY_CATEGORY_PREFIX: opinlyOptions.categoryPrefix,\n OPINLY_AUTHOR_PREFIX: opinlyOptions.authorPrefix,\n };\n\n userNextConfig.env = {\n ...(userNextConfig.env || {}),\n ...opinlyEnvVars,\n };\n}\n\n/**\n * Modifies the passed in Next.js configuration with image rewrites and environment variables.\n *\n * @param nextConfig A Next.js configuration object, as usually exported in `next.config.js` or `next.config.mjs`.\n * @param opinlyOptions Additional options to configure Opinly.\n * @returns The modified config to be exported\n */\nexport const withOpinlyConfig =\n (opinlyOptions: OpinlyOptions) =>\n // Generic over the config type so this composes with any Next version's\n // `NextConfig` (the consumer's next may differ from the one this package was\n // built against). We only read/write `env` and `rewrites` internally.\n <T extends object>(nextConfig: T): T => {\n validateOpinlyOptions(opinlyOptions);\n\n addEnvVars(nextConfig as NextConfig, opinlyOptions);\n\n processRewrites(nextConfig as NextConfig, opinlyOptions);\n\n return nextConfig;\n };\n"],"mappings":"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","names":[]}
|
package/dist/config.d.cts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { NextConfig } from 'next';
|
|
2
1
|
import { z } from 'zod';
|
|
3
2
|
|
|
4
3
|
declare const opinlyOptionsSchema: z.ZodObject<{
|
|
@@ -8,6 +7,8 @@ declare const opinlyOptionsSchema: z.ZodObject<{
|
|
|
8
7
|
cdnNamespace: z.ZodString;
|
|
9
8
|
siteUrl: z.ZodString;
|
|
10
9
|
unoptimizedImages: z.ZodOptional<z.ZodBoolean>;
|
|
10
|
+
categoryPrefix: z.ZodOptional<z.ZodString>;
|
|
11
|
+
authorPrefix: z.ZodOptional<z.ZodString>;
|
|
11
12
|
cdnDomain: z.ZodOptional<z.ZodString>;
|
|
12
13
|
pagesRouter: z.ZodOptional<z.ZodBoolean>;
|
|
13
14
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -17,6 +18,8 @@ declare const opinlyOptionsSchema: z.ZodObject<{
|
|
|
17
18
|
cdnNamespace: string;
|
|
18
19
|
siteUrl: string;
|
|
19
20
|
unoptimizedImages?: boolean | undefined;
|
|
21
|
+
categoryPrefix?: string | undefined;
|
|
22
|
+
authorPrefix?: string | undefined;
|
|
20
23
|
cdnDomain?: string | undefined;
|
|
21
24
|
pagesRouter?: boolean | undefined;
|
|
22
25
|
}, {
|
|
@@ -26,6 +29,8 @@ declare const opinlyOptionsSchema: z.ZodObject<{
|
|
|
26
29
|
cdnNamespace: string;
|
|
27
30
|
siteUrl: string;
|
|
28
31
|
unoptimizedImages?: boolean | undefined;
|
|
32
|
+
categoryPrefix?: string | undefined;
|
|
33
|
+
authorPrefix?: string | undefined;
|
|
29
34
|
cdnDomain?: string | undefined;
|
|
30
35
|
pagesRouter?: boolean | undefined;
|
|
31
36
|
}>;
|
|
@@ -37,6 +42,6 @@ type OpinlyOptions = z.infer<typeof opinlyOptionsSchema>;
|
|
|
37
42
|
* @param opinlyOptions Additional options to configure Opinly.
|
|
38
43
|
* @returns The modified config to be exported
|
|
39
44
|
*/
|
|
40
|
-
declare const withOpinlyConfig: (opinlyOptions: OpinlyOptions) => (nextConfig:
|
|
45
|
+
declare const withOpinlyConfig: (opinlyOptions: OpinlyOptions) => <T extends object>(nextConfig: T) => T;
|
|
41
46
|
|
|
42
47
|
export { withOpinlyConfig };
|
package/dist/config.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { NextConfig } from 'next';
|
|
2
1
|
import { z } from 'zod';
|
|
3
2
|
|
|
4
3
|
declare const opinlyOptionsSchema: z.ZodObject<{
|
|
@@ -8,6 +7,8 @@ declare const opinlyOptionsSchema: z.ZodObject<{
|
|
|
8
7
|
cdnNamespace: z.ZodString;
|
|
9
8
|
siteUrl: z.ZodString;
|
|
10
9
|
unoptimizedImages: z.ZodOptional<z.ZodBoolean>;
|
|
10
|
+
categoryPrefix: z.ZodOptional<z.ZodString>;
|
|
11
|
+
authorPrefix: z.ZodOptional<z.ZodString>;
|
|
11
12
|
cdnDomain: z.ZodOptional<z.ZodString>;
|
|
12
13
|
pagesRouter: z.ZodOptional<z.ZodBoolean>;
|
|
13
14
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -17,6 +18,8 @@ declare const opinlyOptionsSchema: z.ZodObject<{
|
|
|
17
18
|
cdnNamespace: string;
|
|
18
19
|
siteUrl: string;
|
|
19
20
|
unoptimizedImages?: boolean | undefined;
|
|
21
|
+
categoryPrefix?: string | undefined;
|
|
22
|
+
authorPrefix?: string | undefined;
|
|
20
23
|
cdnDomain?: string | undefined;
|
|
21
24
|
pagesRouter?: boolean | undefined;
|
|
22
25
|
}, {
|
|
@@ -26,6 +29,8 @@ declare const opinlyOptionsSchema: z.ZodObject<{
|
|
|
26
29
|
cdnNamespace: string;
|
|
27
30
|
siteUrl: string;
|
|
28
31
|
unoptimizedImages?: boolean | undefined;
|
|
32
|
+
categoryPrefix?: string | undefined;
|
|
33
|
+
authorPrefix?: string | undefined;
|
|
29
34
|
cdnDomain?: string | undefined;
|
|
30
35
|
pagesRouter?: boolean | undefined;
|
|
31
36
|
}>;
|
|
@@ -37,6 +42,6 @@ type OpinlyOptions = z.infer<typeof opinlyOptionsSchema>;
|
|
|
37
42
|
* @param opinlyOptions Additional options to configure Opinly.
|
|
38
43
|
* @returns The modified config to be exported
|
|
39
44
|
*/
|
|
40
|
-
declare const withOpinlyConfig: (opinlyOptions: OpinlyOptions) => (nextConfig:
|
|
45
|
+
declare const withOpinlyConfig: (opinlyOptions: OpinlyOptions) => <T extends object>(nextConfig: T) => T;
|
|
41
46
|
|
|
42
47
|
export { withOpinlyConfig };
|
package/dist/config.js
CHANGED
|
@@ -18,6 +18,8 @@ const opinlyOptionsSchema = z.object({
|
|
|
18
18
|
message: "siteUrl must be a valid URL"
|
|
19
19
|
}),
|
|
20
20
|
unoptimizedImages: z.boolean().optional(),
|
|
21
|
+
categoryPrefix: z.string().optional(),
|
|
22
|
+
authorPrefix: z.string().optional(),
|
|
21
23
|
cdnDomain: z.string({
|
|
22
24
|
description: "INTERNAL USE ONLY: The domain of the CDN. If not provided, the default domain will be used."
|
|
23
25
|
}).url({
|
|
@@ -80,19 +82,26 @@ function addEnvVars(userNextConfig, opinlyOptions) {
|
|
|
80
82
|
OPINLY_SITE_NAME: opinlyOptions.companyName,
|
|
81
83
|
OPINLY_SITE_URL: opinlyOptions.siteUrl,
|
|
82
84
|
OPINLY_UNOPTIMIZED_IMAGES: opinlyOptions.unoptimizedImages ? "true" : void 0,
|
|
83
|
-
OPINLY_PAGES_ROUTER: opinlyOptions.pagesRouter ? "true" : void 0
|
|
85
|
+
OPINLY_PAGES_ROUTER: opinlyOptions.pagesRouter ? "true" : void 0,
|
|
86
|
+
OPINLY_CATEGORY_PREFIX: opinlyOptions.categoryPrefix,
|
|
87
|
+
OPINLY_AUTHOR_PREFIX: opinlyOptions.authorPrefix
|
|
84
88
|
};
|
|
85
89
|
userNextConfig.env = {
|
|
86
90
|
...userNextConfig.env || {},
|
|
87
91
|
...opinlyEnvVars
|
|
88
92
|
};
|
|
89
93
|
}
|
|
90
|
-
const withOpinlyConfig = (opinlyOptions) => (
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
94
|
+
const withOpinlyConfig = (opinlyOptions) => (
|
|
95
|
+
// Generic over the config type so this composes with any Next version's
|
|
96
|
+
// `NextConfig` (the consumer's next may differ from the one this package was
|
|
97
|
+
// built against). We only read/write `env` and `rewrites` internally.
|
|
98
|
+
(nextConfig) => {
|
|
99
|
+
validateOpinlyOptions(opinlyOptions);
|
|
100
|
+
addEnvVars(nextConfig, opinlyOptions);
|
|
101
|
+
processRewrites(nextConfig, opinlyOptions);
|
|
102
|
+
return nextConfig;
|
|
103
|
+
}
|
|
104
|
+
);
|
|
96
105
|
export {
|
|
97
106
|
withOpinlyConfig
|
|
98
107
|
};
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config.ts"],"sourcesContent":["import { NextConfig } from \"next\";\nimport { Rewrite } from \"next/dist/lib/load-custom-routes\";\nimport type { OpinlyEnvVars } from \"./utils/sdk-config\";\nimport { z } from \"zod\";\n\ninterface WithOpinlyOptions {\n imagesPath: `/${string}`;\n blogPath: `/${string}`;\n companyName: string;\n cdnNamespace: string;\n siteUrl: string;\n unoptimizedImages?: boolean;\n}\n\ntype ResolvedRewrites = ReturnType<\n NonNullable<Awaited<NextConfig[\"rewrites\"]>>\n>;\n\nconst opinlyOptionsSchema = z.object({\n imagesPath: z\n .string({})\n .refine(\n (val) => val.startsWith(\"/\") || z.string().url().safeParse(val).success,\n {\n message: \"imagesPath must start with a leading slash (e.g. '/images')\",\n }\n ),\n blogPath: z.string({}).startsWith(\"/\", {\n message: \"blogPath must start with a leading slash i.e. `/blog`\",\n }),\n companyName: z.string({\n required_error: \"companyName is required\",\n invalid_type_error: \"companyName must be a string\",\n }),\n cdnNamespace: z\n .string()\n .min(21, \"CDN namespace must be 21 characters long\")\n .max(21, \"CDN namespace must be 21 characters long\"),\n siteUrl: z.string().url({\n message: \"siteUrl must be a valid URL\",\n }),\n unoptimizedImages: z.boolean().optional(),\n cdnDomain: z\n .string({\n description:\n \"INTERNAL USE ONLY: The domain of the CDN. If not provided, the default domain will be used.\",\n })\n .url({\n message: \"cdnDomain must be a valid URL\",\n })\n .optional(),\n pagesRouter: z.boolean().optional(),\n});\n\ntype OpinlyOptions = z.infer<typeof opinlyOptionsSchema>;\n\nconst validateOpinlyOptions = (opinlyOptions: OpinlyOptions) => {\n if (!opinlyOptions) {\n throw new Error(\n \"[@opinly/next] `opts` is required. Please provide the options object.\"\n );\n }\n\n const parsedOpinlyOptions = opinlyOptionsSchema.safeParse(opinlyOptions);\n\n if (!parsedOpinlyOptions.success) {\n throw new Error(\n `[@opinly/next] Invalid options provided in next.config.js: ${parsedOpinlyOptions.error.message}`\n );\n }\n};\n\nconst processRewrites = (\n userNextConfig: NextConfig,\n opinlyOptions: OpinlyOptions\n): void => {\n const imagesPath = opinlyOptions.imagesPath;\n\n if (!imagesPath.startsWith(\"/\")) {\n console.warn(\n `[@opinly/next] You have provided a url for imagesPath. This is only valid for internal testing and rewrites will be skipped.`\n );\n\n return;\n }\n\n const originalRewrites = userNextConfig.rewrites;\n\n userNextConfig.rewrites = async () => {\n const opinlyRewrite = {\n source: `${opinlyOptions.imagesPath}/:path*`,\n destination: `${opinlyOptions.cdnDomain || \"https://cdn.opinly.ai\"}/${\n opinlyOptions.cdnNamespace\n }/:path*`,\n };\n\n const newRewrites = [opinlyRewrite];\n\n if (opinlyOptions.pagesRouter) {\n newRewrites.push({\n source: \"/sitemap.xml\",\n destination: \"/sitemap\",\n });\n }\n\n if (typeof originalRewrites !== \"function\") {\n return newRewrites;\n }\n\n const resolvedRewrites = await originalRewrites();\n\n if (Array.isArray(resolvedRewrites)) {\n return [...resolvedRewrites, opinlyRewrite];\n } else {\n return {\n ...resolvedRewrites,\n beforeFiles: [...(resolvedRewrites.beforeFiles || []), ...newRewrites],\n };\n }\n };\n};\n\nfunction addEnvVars(userNextConfig: NextConfig, opinlyOptions: OpinlyOptions) {\n const opinlyEnvVars: OpinlyEnvVars = {\n OPINLY_IMAGES_PREFIX: opinlyOptions.imagesPath,\n OPINLY_BLOG_PREFIX: opinlyOptions.blogPath,\n OPINLY_SITE_NAME: opinlyOptions.companyName,\n OPINLY_SITE_URL: opinlyOptions.siteUrl,\n OPINLY_UNOPTIMIZED_IMAGES: opinlyOptions.unoptimizedImages\n ? \"true\"\n : undefined,\n OPINLY_PAGES_ROUTER: opinlyOptions.pagesRouter ? \"true\" : undefined,\n };\n\n userNextConfig.env = {\n ...(userNextConfig.env || {}),\n ...opinlyEnvVars,\n };\n}\n\n/**\n * Modifies the passed in Next.js configuration with image rewrites and environment variables.\n *\n * @param nextConfig A Next.js configuration object, as usually exported in `next.config.js` or `next.config.mjs`.\n * @param opinlyOptions Additional options to configure Opinly.\n * @returns The modified config to be exported\n */\nexport const withOpinlyConfig =\n (opinlyOptions: OpinlyOptions) =>\n (nextConfig:
|
|
1
|
+
{"version":3,"sources":["../src/config.ts"],"sourcesContent":["import { NextConfig } from \"next\";\nimport { Rewrite } from \"next/dist/lib/load-custom-routes\";\nimport type { OpinlyEnvVars } from \"./utils/sdk-config\";\nimport { z } from \"zod\";\n\ninterface WithOpinlyOptions {\n imagesPath: `/${string}`;\n blogPath: `/${string}`;\n companyName: string;\n cdnNamespace: string;\n siteUrl: string;\n unoptimizedImages?: boolean;\n /** URL segment categories live under (relative to blogPath). Default: bare. */\n categoryPrefix?: string;\n /** URL segment authors live under (relative to blogPath). Default: \"authors\". */\n authorPrefix?: string;\n}\n\ntype ResolvedRewrites = ReturnType<\n NonNullable<Awaited<NextConfig[\"rewrites\"]>>\n>;\n\nconst opinlyOptionsSchema = z.object({\n imagesPath: z\n .string({})\n .refine(\n (val) => val.startsWith(\"/\") || z.string().url().safeParse(val).success,\n {\n message: \"imagesPath must start with a leading slash (e.g. '/images')\",\n }\n ),\n blogPath: z.string({}).startsWith(\"/\", {\n message: \"blogPath must start with a leading slash i.e. `/blog`\",\n }),\n companyName: z.string({\n required_error: \"companyName is required\",\n invalid_type_error: \"companyName must be a string\",\n }),\n cdnNamespace: z\n .string()\n .min(21, \"CDN namespace must be 21 characters long\")\n .max(21, \"CDN namespace must be 21 characters long\"),\n siteUrl: z.string().url({\n message: \"siteUrl must be a valid URL\",\n }),\n unoptimizedImages: z.boolean().optional(),\n categoryPrefix: z.string().optional(),\n authorPrefix: z.string().optional(),\n cdnDomain: z\n .string({\n description:\n \"INTERNAL USE ONLY: The domain of the CDN. If not provided, the default domain will be used.\",\n })\n .url({\n message: \"cdnDomain must be a valid URL\",\n })\n .optional(),\n pagesRouter: z.boolean().optional(),\n});\n\ntype OpinlyOptions = z.infer<typeof opinlyOptionsSchema>;\n\nconst validateOpinlyOptions = (opinlyOptions: OpinlyOptions) => {\n if (!opinlyOptions) {\n throw new Error(\n \"[@opinly/next] `opts` is required. Please provide the options object.\"\n );\n }\n\n const parsedOpinlyOptions = opinlyOptionsSchema.safeParse(opinlyOptions);\n\n if (!parsedOpinlyOptions.success) {\n throw new Error(\n `[@opinly/next] Invalid options provided in next.config.js: ${parsedOpinlyOptions.error.message}`\n );\n }\n};\n\nconst processRewrites = (\n userNextConfig: NextConfig,\n opinlyOptions: OpinlyOptions\n): void => {\n const imagesPath = opinlyOptions.imagesPath;\n\n if (!imagesPath.startsWith(\"/\")) {\n console.warn(\n `[@opinly/next] You have provided a url for imagesPath. This is only valid for internal testing and rewrites will be skipped.`\n );\n\n return;\n }\n\n const originalRewrites = userNextConfig.rewrites;\n\n userNextConfig.rewrites = async () => {\n const opinlyRewrite = {\n source: `${opinlyOptions.imagesPath}/:path*`,\n destination: `${opinlyOptions.cdnDomain || \"https://cdn.opinly.ai\"}/${\n opinlyOptions.cdnNamespace\n }/:path*`,\n };\n\n const newRewrites = [opinlyRewrite];\n\n if (opinlyOptions.pagesRouter) {\n newRewrites.push({\n source: \"/sitemap.xml\",\n destination: \"/sitemap\",\n });\n }\n\n if (typeof originalRewrites !== \"function\") {\n return newRewrites;\n }\n\n const resolvedRewrites = await originalRewrites();\n\n if (Array.isArray(resolvedRewrites)) {\n return [...resolvedRewrites, opinlyRewrite];\n } else {\n return {\n ...resolvedRewrites,\n beforeFiles: [...(resolvedRewrites.beforeFiles || []), ...newRewrites],\n };\n }\n };\n};\n\nfunction addEnvVars(userNextConfig: NextConfig, opinlyOptions: OpinlyOptions) {\n const opinlyEnvVars: OpinlyEnvVars = {\n OPINLY_IMAGES_PREFIX: opinlyOptions.imagesPath,\n OPINLY_BLOG_PREFIX: opinlyOptions.blogPath,\n OPINLY_SITE_NAME: opinlyOptions.companyName,\n OPINLY_SITE_URL: opinlyOptions.siteUrl,\n OPINLY_UNOPTIMIZED_IMAGES: opinlyOptions.unoptimizedImages\n ? \"true\"\n : undefined,\n OPINLY_PAGES_ROUTER: opinlyOptions.pagesRouter ? \"true\" : undefined,\n OPINLY_CATEGORY_PREFIX: opinlyOptions.categoryPrefix,\n OPINLY_AUTHOR_PREFIX: opinlyOptions.authorPrefix,\n };\n\n userNextConfig.env = {\n ...(userNextConfig.env || {}),\n ...opinlyEnvVars,\n };\n}\n\n/**\n * Modifies the passed in Next.js configuration with image rewrites and environment variables.\n *\n * @param nextConfig A Next.js configuration object, as usually exported in `next.config.js` or `next.config.mjs`.\n * @param opinlyOptions Additional options to configure Opinly.\n * @returns The modified config to be exported\n */\nexport const withOpinlyConfig =\n (opinlyOptions: OpinlyOptions) =>\n // Generic over the config type so this composes with any Next version's\n // `NextConfig` (the consumer's next may differ from the one this package was\n // built against). We only read/write `env` and `rewrites` internally.\n <T extends object>(nextConfig: T): T => {\n validateOpinlyOptions(opinlyOptions);\n\n addEnvVars(nextConfig as NextConfig, opinlyOptions);\n\n processRewrites(nextConfig as NextConfig, opinlyOptions);\n\n return nextConfig;\n };\n"],"mappings":"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","names":[]}
|
package/dist/index.cjs
CHANGED
|
@@ -3,6 +3,10 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
6
10
|
var __copyProps = (to, from, except, desc) => {
|
|
7
11
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
12
|
for (let key of __getOwnPropNames(from))
|
|
@@ -11,13 +15,39 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
11
15
|
}
|
|
12
16
|
return to;
|
|
13
17
|
};
|
|
14
|
-
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
15
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
16
19
|
var index_exports = {};
|
|
20
|
+
__export(index_exports, {
|
|
21
|
+
OpinlyJsonLd: () => import_json_ld.OpinlyJsonLd,
|
|
22
|
+
buildBlogPostingJsonLd: () => import_json_ld.buildBlogPostingJsonLd,
|
|
23
|
+
buildFaqJsonLd: () => import_json_ld.buildFaqJsonLd,
|
|
24
|
+
cn: () => import_merge.cn,
|
|
25
|
+
formatDate: () => import_dates.formatDate,
|
|
26
|
+
generateOpinlyMetadata: () => import_generate_metadata.generateOpinlyMetadata,
|
|
27
|
+
generateSiteMapXML: () => import_generate_sitemap_xml.generateSiteMapXML,
|
|
28
|
+
opinlyConfig: () => import_sdk_config.opinlyConfig,
|
|
29
|
+
setOpinlyConfig: () => import_sdk_config.setOpinlyConfig,
|
|
30
|
+
withOpinlyConfig: () => import_config.withOpinlyConfig
|
|
31
|
+
});
|
|
17
32
|
module.exports = __toCommonJS(index_exports);
|
|
18
|
-
|
|
33
|
+
var import_config = require("./config");
|
|
34
|
+
var import_generate_metadata = require("./utils/generate-metadata");
|
|
35
|
+
var import_json_ld = require("./json-ld");
|
|
36
|
+
var import_sdk_config = require("./utils/sdk-config");
|
|
37
|
+
var import_generate_sitemap_xml = require("./utils/generate-sitemap-xml");
|
|
38
|
+
var import_dates = require("./utils/dates");
|
|
39
|
+
var import_merge = require("./utils/merge");
|
|
19
40
|
// Annotate the CommonJS export names for ESM import in node:
|
|
20
41
|
0 && (module.exports = {
|
|
21
|
-
|
|
42
|
+
OpinlyJsonLd,
|
|
43
|
+
buildBlogPostingJsonLd,
|
|
44
|
+
buildFaqJsonLd,
|
|
45
|
+
cn,
|
|
46
|
+
formatDate,
|
|
47
|
+
generateOpinlyMetadata,
|
|
48
|
+
generateSiteMapXML,
|
|
49
|
+
opinlyConfig,
|
|
50
|
+
setOpinlyConfig,
|
|
51
|
+
withOpinlyConfig
|
|
22
52
|
});
|
|
23
53
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { withOpinlyConfig } from \"./config\";\nexport { generateOpinlyMetadata } from \"./utils/generate-metadata\";\nexport {\n OpinlyJsonLd,\n buildBlogPostingJsonLd,\n buildFaqJsonLd,\n} from \"./json-ld\";\nexport {\n opinlyConfig,\n setOpinlyConfig,\n type OpinlyEnvVars,\n} from \"./utils/sdk-config\";\nexport { generateSiteMapXML } from \"./utils/generate-sitemap-xml\";\nexport { formatDate } from \"./utils/dates\";\nexport { cn } from \"./utils/merge\";\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAiC;AACjC,+BAAuC;AACvC,qBAIO;AACP,wBAIO;AACP,kCAAmC;AACnC,mBAA2B;AAC3B,mBAAmB;","names":[]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { withOpinlyConfig } from './config.cjs';
|
|
2
|
+
export { generateOpinlyMetadata } from './utils/generate-metadata.cjs';
|
|
3
|
+
export { OpinlyJsonLd, buildBlogPostingJsonLd, buildFaqJsonLd } from './json-ld.cjs';
|
|
4
|
+
export { OpinlyEnvVars, opinlyConfig, setOpinlyConfig } from './utils/sdk-config.cjs';
|
|
5
|
+
export { generateSiteMapXML } from './utils/generate-sitemap-xml.cjs';
|
|
6
|
+
export { formatDate } from './utils/dates.cjs';
|
|
7
|
+
export { cn } from './utils/merge.cjs';
|
|
8
|
+
import 'zod';
|
|
9
|
+
import 'next';
|
|
10
|
+
import '@opinly/shared';
|
|
11
|
+
import 'schema-dts';
|
|
2
12
|
import 'react/jsx-runtime';
|
|
3
|
-
import './components/blog-post/index.cjs';
|
|
4
|
-
import 'react';
|
|
5
|
-
import './components/blog-post/_types/blog-post.cjs';
|
|
6
13
|
import '@opinly/backend';
|
|
7
|
-
import '
|
|
8
|
-
import './components/home-page/index.cjs';
|
|
14
|
+
import 'clsx';
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { withOpinlyConfig } from './config.js';
|
|
2
|
+
export { generateOpinlyMetadata } from './utils/generate-metadata.js';
|
|
3
|
+
export { OpinlyJsonLd, buildBlogPostingJsonLd, buildFaqJsonLd } from './json-ld.js';
|
|
4
|
+
export { OpinlyEnvVars, opinlyConfig, setOpinlyConfig } from './utils/sdk-config.js';
|
|
5
|
+
export { generateSiteMapXML } from './utils/generate-sitemap-xml.js';
|
|
6
|
+
export { formatDate } from './utils/dates.js';
|
|
7
|
+
export { cn } from './utils/merge.js';
|
|
8
|
+
import 'zod';
|
|
9
|
+
import 'next';
|
|
10
|
+
import '@opinly/shared';
|
|
11
|
+
import 'schema-dts';
|
|
2
12
|
import 'react/jsx-runtime';
|
|
3
|
-
import './components/blog-post/index.js';
|
|
4
|
-
import 'react';
|
|
5
|
-
import './components/blog-post/_types/blog-post.js';
|
|
6
13
|
import '@opinly/backend';
|
|
7
|
-
import '
|
|
8
|
-
import './components/home-page/index.js';
|
|
14
|
+
import 'clsx';
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,27 @@
|
|
|
1
|
-
|
|
1
|
+
import { withOpinlyConfig } from "./config";
|
|
2
|
+
import { generateOpinlyMetadata } from "./utils/generate-metadata";
|
|
3
|
+
import {
|
|
4
|
+
OpinlyJsonLd,
|
|
5
|
+
buildBlogPostingJsonLd,
|
|
6
|
+
buildFaqJsonLd
|
|
7
|
+
} from "./json-ld";
|
|
8
|
+
import {
|
|
9
|
+
opinlyConfig,
|
|
10
|
+
setOpinlyConfig
|
|
11
|
+
} from "./utils/sdk-config";
|
|
12
|
+
import { generateSiteMapXML } from "./utils/generate-sitemap-xml";
|
|
13
|
+
import { formatDate } from "./utils/dates";
|
|
14
|
+
import { cn } from "./utils/merge";
|
|
15
|
+
export {
|
|
16
|
+
OpinlyJsonLd,
|
|
17
|
+
buildBlogPostingJsonLd,
|
|
18
|
+
buildFaqJsonLd,
|
|
19
|
+
cn,
|
|
20
|
+
formatDate,
|
|
21
|
+
generateOpinlyMetadata,
|
|
22
|
+
generateSiteMapXML,
|
|
23
|
+
opinlyConfig,
|
|
24
|
+
setOpinlyConfig,
|
|
25
|
+
withOpinlyConfig
|
|
26
|
+
};
|
|
2
27
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { withOpinlyConfig } from \"./config\";\nexport { generateOpinlyMetadata } from \"./utils/generate-metadata\";\nexport {\n OpinlyJsonLd,\n buildBlogPostingJsonLd,\n buildFaqJsonLd,\n} from \"./json-ld\";\nexport {\n opinlyConfig,\n setOpinlyConfig,\n type OpinlyEnvVars,\n} from \"./utils/sdk-config\";\nexport { generateSiteMapXML } from \"./utils/generate-sitemap-xml\";\nexport { formatDate } from \"./utils/dates\";\nexport { cn } from \"./utils/merge\";\n"],"mappings":"AAAA,SAAS,wBAAwB;AACjC,SAAS,8BAA8B;AACvC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AACP,SAAS,0BAA0B;AACnC,SAAS,kBAAkB;AAC3B,SAAS,UAAU;","names":[]}
|
package/dist/json-ld.cjs
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var json_ld_exports = {};
|
|
20
|
+
__export(json_ld_exports, {
|
|
21
|
+
OpinlyJsonLd: () => OpinlyJsonLd,
|
|
22
|
+
buildBlogPostingJsonLd: () => buildBlogPostingJsonLd,
|
|
23
|
+
buildFaqJsonLd: () => buildFaqJsonLd
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(json_ld_exports);
|
|
26
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
27
|
+
var import_shared = require("@opinly/shared");
|
|
28
|
+
var import_sdk_config = require("./utils/sdk-config");
|
|
29
|
+
const rendererConfig = () => ({
|
|
30
|
+
imagesPrefix: import_sdk_config.opinlyConfig.imagesPrefix,
|
|
31
|
+
siteUrl: import_sdk_config.opinlyConfig.siteUrl,
|
|
32
|
+
blogPrefix: import_sdk_config.opinlyConfig.blogPrefix,
|
|
33
|
+
siteName: import_sdk_config.opinlyConfig.siteName
|
|
34
|
+
});
|
|
35
|
+
const OpinlyJsonLd = ({ data }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
36
|
+
"script",
|
|
37
|
+
{
|
|
38
|
+
type: "application/ld+json",
|
|
39
|
+
dangerouslySetInnerHTML: { __html: JSON.stringify(data) }
|
|
40
|
+
}
|
|
41
|
+
);
|
|
42
|
+
const buildBlogPostingJsonLd = (post) => (0, import_shared.buildBlogPostingJsonLd)(
|
|
43
|
+
{
|
|
44
|
+
title: post.title,
|
|
45
|
+
description: post.description,
|
|
46
|
+
content: post.content,
|
|
47
|
+
firstPublishedAt: post.firstPublishedAt,
|
|
48
|
+
modifiedAt: post.modifiedAt,
|
|
49
|
+
author: post.author ? { name: post.author.name } : null,
|
|
50
|
+
imageFileKey: post.titleFile?.fileKey
|
|
51
|
+
},
|
|
52
|
+
rendererConfig()
|
|
53
|
+
);
|
|
54
|
+
const buildFaqJsonLd = import_shared.buildFaqJsonLd;
|
|
55
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
56
|
+
0 && (module.exports = {
|
|
57
|
+
OpinlyJsonLd,
|
|
58
|
+
buildBlogPostingJsonLd,
|
|
59
|
+
buildFaqJsonLd
|
|
60
|
+
});
|
|
61
|
+
//# sourceMappingURL=json-ld.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/json-ld.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n buildBlogPostingJsonLd as coreBlogPostingJsonLd,\n buildFaqJsonLd as coreFaqJsonLd,\n type OpinlyNode,\n type OpinlyConfig,\n} from \"@opinly/shared\";\nimport type { FullPost } from \"@opinly/backend\";\nimport { opinlyConfig } from \"./utils/sdk-config\";\n\nconst rendererConfig = (): OpinlyConfig => ({\n imagesPrefix: opinlyConfig.imagesPrefix,\n siteUrl: opinlyConfig.siteUrl,\n blogPrefix: opinlyConfig.blogPrefix,\n siteName: opinlyConfig.siteName,\n});\n\n/** Renders a JSON-LD `<script>` tag (the Next-specific bit). */\nexport const OpinlyJsonLd = ({ data }: { data: object }) => (\n <script\n type=\"application/ld+json\"\n dangerouslySetInnerHTML={{ __html: JSON.stringify(data) }}\n />\n);\n\n/** BlogPosting structured data from a resolved post. Delegates to @opinly/shared. */\nexport const buildBlogPostingJsonLd = (post: FullPost) =>\n coreBlogPostingJsonLd(\n {\n title: post.title,\n description: post.description,\n content: post.content as OpinlyNode,\n firstPublishedAt: post.firstPublishedAt,\n modifiedAt: post.modifiedAt,\n author: post.author ? { name: post.author.name } : null,\n imageFileKey: post.titleFile?.fileKey,\n },\n rendererConfig(),\n );\n\n/** FAQPage structured data. Re-exported from @opinly/shared. */\nexport const buildFaqJsonLd = coreFaqJsonLd;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBE;AAlBF,oBAKO;AAEP,wBAA6B;AAE7B,MAAM,iBAAiB,OAAqB;AAAA,EAC1C,cAAc,+BAAa;AAAA,EAC3B,SAAS,+BAAa;AAAA,EACtB,YAAY,+BAAa;AAAA,EACzB,UAAU,+BAAa;AACzB;AAGO,MAAM,eAAe,CAAC,EAAE,KAAK,MAClC;AAAA,EAAC;AAAA;AAAA,IACC,MAAK;AAAA,IACL,yBAAyB,EAAE,QAAQ,KAAK,UAAU,IAAI,EAAE;AAAA;AAC1D;AAIK,MAAM,yBAAyB,CAAC,aACrC,cAAAA;AAAA,EACE;AAAA,IACE,OAAO,KAAK;AAAA,IACZ,aAAa,KAAK;AAAA,IAClB,SAAS,KAAK;AAAA,IACd,kBAAkB,KAAK;AAAA,IACvB,YAAY,KAAK;AAAA,IACjB,QAAQ,KAAK,SAAS,EAAE,MAAM,KAAK,OAAO,KAAK,IAAI;AAAA,IACnD,cAAc,KAAK,WAAW;AAAA,EAChC;AAAA,EACA,eAAe;AACjB;AAGK,MAAM,iBAAiB,cAAAC;","names":["coreBlogPostingJsonLd","coreFaqJsonLd"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as schema_dts from 'schema-dts';
|
|
2
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
3
|
+
import { FullPost } from '@opinly/backend';
|
|
4
|
+
|
|
5
|
+
/** Renders a JSON-LD `<script>` tag (the Next-specific bit). */
|
|
6
|
+
declare const OpinlyJsonLd: ({ data }: {
|
|
7
|
+
data: object;
|
|
8
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
9
|
+
/** BlogPosting structured data from a resolved post. Delegates to @opinly/shared. */
|
|
10
|
+
declare const buildBlogPostingJsonLd: (post: FullPost) => schema_dts.WithContext<schema_dts.BlogPosting>;
|
|
11
|
+
/** FAQPage structured data. Re-exported from @opinly/shared. */
|
|
12
|
+
declare const buildFaqJsonLd: (faqs: {
|
|
13
|
+
question: string;
|
|
14
|
+
answer: string;
|
|
15
|
+
}[]) => schema_dts.WithContext<schema_dts.FAQPage>;
|
|
16
|
+
|
|
17
|
+
export { OpinlyJsonLd, buildBlogPostingJsonLd, buildFaqJsonLd };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as schema_dts from 'schema-dts';
|
|
2
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
3
|
+
import { FullPost } from '@opinly/backend';
|
|
4
|
+
|
|
5
|
+
/** Renders a JSON-LD `<script>` tag (the Next-specific bit). */
|
|
6
|
+
declare const OpinlyJsonLd: ({ data }: {
|
|
7
|
+
data: object;
|
|
8
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
9
|
+
/** BlogPosting structured data from a resolved post. Delegates to @opinly/shared. */
|
|
10
|
+
declare const buildBlogPostingJsonLd: (post: FullPost) => schema_dts.WithContext<schema_dts.BlogPosting>;
|
|
11
|
+
/** FAQPage structured data. Re-exported from @opinly/shared. */
|
|
12
|
+
declare const buildFaqJsonLd: (faqs: {
|
|
13
|
+
question: string;
|
|
14
|
+
answer: string;
|
|
15
|
+
}[]) => schema_dts.WithContext<schema_dts.FAQPage>;
|
|
16
|
+
|
|
17
|
+
export { OpinlyJsonLd, buildBlogPostingJsonLd, buildFaqJsonLd };
|
package/dist/json-ld.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import {
|
|
3
|
+
buildBlogPostingJsonLd as coreBlogPostingJsonLd,
|
|
4
|
+
buildFaqJsonLd as coreFaqJsonLd
|
|
5
|
+
} from "@opinly/shared";
|
|
6
|
+
import { opinlyConfig } from "./utils/sdk-config";
|
|
7
|
+
const rendererConfig = () => ({
|
|
8
|
+
imagesPrefix: opinlyConfig.imagesPrefix,
|
|
9
|
+
siteUrl: opinlyConfig.siteUrl,
|
|
10
|
+
blogPrefix: opinlyConfig.blogPrefix,
|
|
11
|
+
siteName: opinlyConfig.siteName
|
|
12
|
+
});
|
|
13
|
+
const OpinlyJsonLd = ({ data }) => /* @__PURE__ */ jsx(
|
|
14
|
+
"script",
|
|
15
|
+
{
|
|
16
|
+
type: "application/ld+json",
|
|
17
|
+
dangerouslySetInnerHTML: { __html: JSON.stringify(data) }
|
|
18
|
+
}
|
|
19
|
+
);
|
|
20
|
+
const buildBlogPostingJsonLd = (post) => coreBlogPostingJsonLd(
|
|
21
|
+
{
|
|
22
|
+
title: post.title,
|
|
23
|
+
description: post.description,
|
|
24
|
+
content: post.content,
|
|
25
|
+
firstPublishedAt: post.firstPublishedAt,
|
|
26
|
+
modifiedAt: post.modifiedAt,
|
|
27
|
+
author: post.author ? { name: post.author.name } : null,
|
|
28
|
+
imageFileKey: post.titleFile?.fileKey
|
|
29
|
+
},
|
|
30
|
+
rendererConfig()
|
|
31
|
+
);
|
|
32
|
+
const buildFaqJsonLd = coreFaqJsonLd;
|
|
33
|
+
export {
|
|
34
|
+
OpinlyJsonLd,
|
|
35
|
+
buildBlogPostingJsonLd,
|
|
36
|
+
buildFaqJsonLd
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=json-ld.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/json-ld.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n buildBlogPostingJsonLd as coreBlogPostingJsonLd,\n buildFaqJsonLd as coreFaqJsonLd,\n type OpinlyNode,\n type OpinlyConfig,\n} from \"@opinly/shared\";\nimport type { FullPost } from \"@opinly/backend\";\nimport { opinlyConfig } from \"./utils/sdk-config\";\n\nconst rendererConfig = (): OpinlyConfig => ({\n imagesPrefix: opinlyConfig.imagesPrefix,\n siteUrl: opinlyConfig.siteUrl,\n blogPrefix: opinlyConfig.blogPrefix,\n siteName: opinlyConfig.siteName,\n});\n\n/** Renders a JSON-LD `<script>` tag (the Next-specific bit). */\nexport const OpinlyJsonLd = ({ data }: { data: object }) => (\n <script\n type=\"application/ld+json\"\n dangerouslySetInnerHTML={{ __html: JSON.stringify(data) }}\n />\n);\n\n/** BlogPosting structured data from a resolved post. Delegates to @opinly/shared. */\nexport const buildBlogPostingJsonLd = (post: FullPost) =>\n coreBlogPostingJsonLd(\n {\n title: post.title,\n description: post.description,\n content: post.content as OpinlyNode,\n firstPublishedAt: post.firstPublishedAt,\n modifiedAt: post.modifiedAt,\n author: post.author ? { name: post.author.name } : null,\n imageFileKey: post.titleFile?.fileKey,\n },\n rendererConfig(),\n );\n\n/** FAQPage structured data. Re-exported from @opinly/shared. */\nexport const buildFaqJsonLd = coreFaqJsonLd;\n"],"mappings":"AAmBE;AAlBF;AAAA,EACE,0BAA0B;AAAA,EAC1B,kBAAkB;AAAA,OAGb;AAEP,SAAS,oBAAoB;AAE7B,MAAM,iBAAiB,OAAqB;AAAA,EAC1C,cAAc,aAAa;AAAA,EAC3B,SAAS,aAAa;AAAA,EACtB,YAAY,aAAa;AAAA,EACzB,UAAU,aAAa;AACzB;AAGO,MAAM,eAAe,CAAC,EAAE,KAAK,MAClC;AAAA,EAAC;AAAA;AAAA,IACC,MAAK;AAAA,IACL,yBAAyB,EAAE,QAAQ,KAAK,UAAU,IAAI,EAAE;AAAA;AAC1D;AAIK,MAAM,yBAAyB,CAAC,SACrC;AAAA,EACE;AAAA,IACE,OAAO,KAAK;AAAA,IACZ,aAAa,KAAK;AAAA,IAClB,SAAS,KAAK;AAAA,IACd,kBAAkB,KAAK;AAAA,IACvB,YAAY,KAAK;AAAA,IACjB,QAAQ,KAAK,SAAS,EAAE,MAAM,KAAK,OAAO,KAAK,IAAI;AAAA,IACnD,cAAc,KAAK,WAAW;AAAA,EAChC;AAAA,EACA,eAAe;AACjB;AAGK,MAAM,iBAAiB;","names":[]}
|
|
@@ -21,86 +21,30 @@ __export(generate_metadata_exports, {
|
|
|
21
21
|
generateOpinlyMetadata: () => generateOpinlyMetadata
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(generate_metadata_exports);
|
|
24
|
+
var import_shared = require("@opinly/shared");
|
|
24
25
|
var import_sdk_config = require("./sdk-config");
|
|
25
|
-
const generateOpinlyMetadata = async (
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
title: blog.data.title,
|
|
48
|
-
description: blog.data.description,
|
|
49
|
-
openGraph: {
|
|
50
|
-
images,
|
|
51
|
-
type: "article",
|
|
52
|
-
authors: blog.data.author && [
|
|
53
|
-
`${import_sdk_config.opinlyConfig.imagesPrefix}/authors/${blog.data.author.slug}`
|
|
54
|
-
],
|
|
55
|
-
title: blog.data.title
|
|
56
|
-
},
|
|
57
|
-
// keywords: [blog.data.keywords],
|
|
58
|
-
authors: blog.data.author && [
|
|
59
|
-
{
|
|
60
|
-
name: blog.data.author.name,
|
|
61
|
-
url: `${import_sdk_config.opinlyConfig.imagesPrefix}/authors/${blog.data.author.slug}`
|
|
62
|
-
}
|
|
63
|
-
],
|
|
64
|
-
other: {}
|
|
65
|
-
};
|
|
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
|
-
}
|
|
103
|
-
return parent;
|
|
26
|
+
const generateOpinlyMetadata = async (resolved, parent) => {
|
|
27
|
+
const base = await parent;
|
|
28
|
+
const meta = (0, import_shared.buildMetadata)(resolved, {
|
|
29
|
+
imagesPrefix: import_sdk_config.opinlyConfig.imagesPrefix,
|
|
30
|
+
siteUrl: import_sdk_config.opinlyConfig.siteUrl,
|
|
31
|
+
blogPrefix: import_sdk_config.opinlyConfig.blogPrefix,
|
|
32
|
+
siteName: import_sdk_config.opinlyConfig.siteName,
|
|
33
|
+
categoryPrefix: import_sdk_config.opinlyConfig.categoryPrefix,
|
|
34
|
+
authorPrefix: import_sdk_config.opinlyConfig.authorPrefix
|
|
35
|
+
});
|
|
36
|
+
return {
|
|
37
|
+
...base,
|
|
38
|
+
title: meta.title,
|
|
39
|
+
description: meta.description,
|
|
40
|
+
openGraph: {
|
|
41
|
+
title: meta.title,
|
|
42
|
+
description: meta.description,
|
|
43
|
+
type: meta.ogType ?? "website",
|
|
44
|
+
images: meta.ogImage ? [meta.ogImage] : void 0
|
|
45
|
+
},
|
|
46
|
+
...meta.authors ? { authors: meta.authors } : {}
|
|
47
|
+
};
|
|
104
48
|
};
|
|
105
49
|
// Annotate the CommonJS export names for ESM import in node:
|
|
106
50
|
0 && (module.exports = {
|