studiocms
Version:
Astro Native CMS for AstroDB. Built from the ground up by the Astro community.
92 lines (91 loc) • 2.98 kB
JavaScript
import { integrationLogger } from "@withstudiocms/internal_helpers/astro-integration";
import {
addVirtualImports,
createResolver,
defineUtility,
hasIntegration
} from "astro-integration-kit";
import { buildTranslations, loadJsTranslations } from "../../utils/lang-helper.js";
const webVitalsNameList = ["@studiocms/web-vitals"];
const { resolve } = createResolver(import.meta.url);
const translations = await loadJsTranslations("./i18n", import.meta.url);
const t = await buildTranslations(translations);
const checkForWebVitals = defineUtility("astro:config:setup")(
(params, opts) => {
integrationLogger(
{ logger: params.logger, logLevel: "info", verbose: opts.verbose },
"Checking for Web Vitals integration..."
);
let exists = false;
for (const item of webVitalsNameList) {
const isEnabled = hasIntegration(params, { name: item });
if (isEnabled) {
exists = true;
integrationLogger(
{ logger: params.logger, logLevel: "info", verbose: opts.verbose },
"Web Vitals Integration Found!"
);
}
}
addVirtualImports(params, {
name: opts.name,
imports: {
"studiocms-dashboard:web-vitals": `
export * from "${resolve("./webVital.js")}"
`
}
});
const webVitalsPlugin = {
name: "Web Vitals",
identifier: "@studiocms/web-vitals",
studiocmsMinimumVersion: opts.version,
hooks: {
"studiocms:config:setup": ({ setDashboard }) => {
setDashboard({
translations,
dashboardGridItems: [
{
name: "core-web-vitals",
span: 2,
variant: "default",
header: {
// biome-ignore lint/style/noNonNullAssertion: this is okay
title: t.getComponent("en", "core-web-vitals").title,
icon: "heroicons:chart-pie"
},
body: {
html: "<corevitals></corevitals>",
components: {
corevitals: resolve("./dashboard-grid-items/CoreVitals.astro")
}
}
}
],
dashboardPages: {
admin: [
{
title: t.buildPageTitle("@page/analytics", "title"),
icon: "heroicons:chart-pie",
route: "analytics",
// biome-ignore lint/style/noNonNullAssertion: this is okay
description: t.getComponent("en", "@page/analytics").description,
sidebar: "single",
pageBodyComponent: resolve("./pages/analytics/body.astro"),
requiredPermissions: "admin"
}
]
}
});
}
}
};
if (exists) {
return webVitalsPlugin;
}
return null;
}
);
export {
checkForWebVitals,
webVitalsNameList
};