kizlo 0.3.2 → 0.5.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.
@@ -0,0 +1,42 @@
1
+ import { BrandSettings } from "../settings/service.interface.js";
2
+
3
+ //#region src/brand/icons.d.ts
4
+ interface IconDescriptor {
5
+ url: string;
6
+ /** The attachment's mime, e.g. `image/svg+xml`, mapped to the `type` attribute. */
7
+ type: string;
8
+ /** `"any"` for scalable/single sources; omitted for `.ico`. */
9
+ sizes?: string;
10
+ /** Media query for scheme-specific variants, e.g. `(prefers-color-scheme: dark)`. */
11
+ media?: string;
12
+ }
13
+ interface ManifestIcon {
14
+ src: string;
15
+ type: string;
16
+ sizes: string;
17
+ /**
18
+ * `"maskable"` marks art with a safe zone the launcher may crop to any
19
+ * adaptive shape; omitted (default `"any"`) sources render uncropped.
20
+ */
21
+ purpose?: "any" | "maskable";
22
+ }
23
+ interface ResolvedIcons {
24
+ /** `rel="icon"` candidates: the light source plus an optional dark variant. */
25
+ icon: IconDescriptor[];
26
+ /** `rel="apple-touch-icon"` candidate (raster-guarded), or empty. */
27
+ appleTouch: IconDescriptor[];
28
+ /**
29
+ * Web-manifest icon entries (raster or SVG): the square brand icon as the
30
+ * default `"any"` source — expanded to one entry per real square rendition —
31
+ * plus the dedicated Android icon as `"maskable"` when provided. Either may
32
+ * be absent.
33
+ */
34
+ manifestIcons: ManifestIcon[];
35
+ }
36
+ /**
37
+ * Resolve the brand settings into a normalized icon set. Slots that resolve to
38
+ * nothing are simply left out; the consumer only emits what is present.
39
+ */
40
+ declare function resolveIcons(brand: BrandSettings): ResolvedIcons;
41
+ //#endregion
42
+ export { IconDescriptor, ManifestIcon, ResolvedIcons, resolveIcons };
@@ -0,0 +1,108 @@
1
+ //#region src/brand/icons.ts
2
+ /** Raster mimes: the only sources iOS home-screen icons can render. */
3
+ const RASTER_MIMES = new Set(["image/png", "image/jpeg"]);
4
+ /** Scalable icon mime, valid in `rel=icon` and modern web manifests. */
5
+ const SVG_MIME = "image/svg+xml";
6
+ /** Mimes a web manifest can use: raster plus scalable SVG. `.ico` is excluded. */
7
+ const MANIFEST_MIMES = new Set([...RASTER_MIMES, SVG_MIME]);
8
+ /**
9
+ * Smallest square rendition worth advertising as a manifest icon. 192px is
10
+ * Chrome's minimum installable icon size, so smaller generated copies add no
11
+ * install value; a source below it still falls through to its original.
12
+ */
13
+ const MANIFEST_ICON_FLOOR = 192;
14
+ /** `.ico` self-describes its bundled sizes, so it takes no `sizes` hint. */
15
+ const ICO_MIMES = new Set(["image/x-icon", "image/vnd.microsoft.icon"]);
16
+ function isRaster(media) {
17
+ return media != null && media.mime !== void 0 && RASTER_MIMES.has(media.mime);
18
+ }
19
+ /** Return the media only when it is a raster the target can render; otherwise null. */
20
+ function raster(media) {
21
+ return isRaster(media) ? media : null;
22
+ }
23
+ /** Return the media only when a web manifest can render it (raster or SVG). */
24
+ function manifestSource(media) {
25
+ return media?.mime && MANIFEST_MIMES.has(media.mime) ? media : null;
26
+ }
27
+ /**
28
+ * A raster source carries real pixel dimensions; use them verbatim so a
29
+ * descriptor never claims a size the image cannot satisfy. Falls back to `"any"`
30
+ * on scalable sources (e.g. SVG) that have no fixed size.
31
+ */
32
+ function pixelSize(media) {
33
+ return media.width && media.height ? `${media.width}x${media.height}` : "any";
34
+ }
35
+ function toDescriptor(media, extra) {
36
+ return {
37
+ url: media.src,
38
+ type: media.mime ?? "",
39
+ sizes: media.mime && ICO_MIMES.has(media.mime) ? void 0 : pixelSize(media),
40
+ ...extra
41
+ };
42
+ }
43
+ /**
44
+ * Manifest icon entries for a source. A scalable SVG yields a single `"any"`
45
+ * entry (it covers every size). A raster source expands into its real renditions
46
+ * — the original plus WordPress's generated resizes — keeping only square ones at
47
+ * or above the floor so browsers get genuine 192/512-ish icons; if none qualify
48
+ * (e.g. a non-square upload) the original is used as-is.
49
+ */
50
+ function toManifestIcons(media, purpose) {
51
+ const type = media.mime ?? "";
52
+ const withPurpose = purpose ? { purpose } : {};
53
+ if (media.mime === SVG_MIME) return [{
54
+ src: media.src,
55
+ type,
56
+ sizes: "any",
57
+ ...withPurpose
58
+ }];
59
+ const square = [{
60
+ src: media.src,
61
+ width: media.width,
62
+ height: media.height
63
+ }, ...media.variants ?? []].filter((r) => r.width && r.height && r.width === r.height && r.width >= MANIFEST_ICON_FLOOR);
64
+ const chosen = square.length ? square : [{
65
+ src: media.src,
66
+ width: media.width,
67
+ height: media.height
68
+ }];
69
+ const seen = /* @__PURE__ */ new Set();
70
+ const icons = [];
71
+ for (const r of chosen) {
72
+ const sizes = r.width && r.height ? `${r.width}x${r.height}` : "any";
73
+ if (seen.has(sizes)) continue;
74
+ seen.add(sizes);
75
+ icons.push({
76
+ src: r.src,
77
+ type,
78
+ sizes,
79
+ ...withPurpose
80
+ });
81
+ }
82
+ return icons;
83
+ }
84
+ /**
85
+ * Resolve the brand settings into a normalized icon set. Slots that resolve to
86
+ * nothing are simply left out; the consumer only emits what is present.
87
+ */
88
+ function resolveIcons(brand) {
89
+ const icon = [];
90
+ const light = brand.favicon ?? brand.logo_icon;
91
+ if (light) icon.push(toDescriptor(light));
92
+ if (brand.favicon_dark) icon.push(toDescriptor(brand.favicon_dark, { media: "(prefers-color-scheme: dark)" }));
93
+ const apple = raster(brand.ios_app_icon) ?? raster(brand.favicon);
94
+ const appleTouch = apple ? [toDescriptor(apple)] : [];
95
+ const manifestIcons = [];
96
+ const anySource = manifestSource(brand.logo_icon) ?? manifestSource(brand.favicon);
97
+ if (anySource) manifestIcons.push(...toManifestIcons(anySource));
98
+ const maskable = manifestSource(brand.android_app_icon);
99
+ if (maskable) manifestIcons.push(...toManifestIcons(maskable, "maskable"));
100
+ return {
101
+ icon,
102
+ appleTouch,
103
+ manifestIcons
104
+ };
105
+ }
106
+
107
+ //#endregion
108
+ export { resolveIcons };
@@ -0,0 +1,2 @@
1
+ import { IconDescriptor, ManifestIcon, ResolvedIcons, resolveIcons } from "./icons.js";
2
+ import { WEB_MANIFEST_ROUTE, WebManifest, buildWebManifest, createManifestRoute } from "./manifest.js";
@@ -0,0 +1,21 @@
1
+ import { Settings } from "../settings/service.interface.js";
2
+ import { ManifestIcon } from "./icons.js";
3
+ import { S2SClient } from "../kizlo.js";
4
+
5
+ //#region src/brand/manifest.d.ts
6
+ declare const WEB_MANIFEST_ROUTE: "/site.webmanifest";
7
+ interface WebManifest {
8
+ id: string;
9
+ name: string;
10
+ short_name: string;
11
+ start_url: string;
12
+ scope: string;
13
+ display: "standalone" | "fullscreen" | "minimal-ui" | "browser";
14
+ background_color?: string;
15
+ theme_color?: string;
16
+ icons: ManifestIcon[];
17
+ }
18
+ declare function buildWebManifest(settings: Settings): WebManifest;
19
+ declare function createManifestRoute(client: S2SClient<[]>): (_request: Request) => Promise<Response>;
20
+ //#endregion
21
+ export { WEB_MANIFEST_ROUTE, WebManifest, buildWebManifest, createManifestRoute };
@@ -0,0 +1,28 @@
1
+ import { resolveIcons } from "./icons.js";
2
+
3
+ //#region src/brand/manifest.ts
4
+ const WEB_MANIFEST_ROUTE = "/site.webmanifest";
5
+ function buildWebManifest(settings) {
6
+ const org = settings.identity.type === "organization" ? settings.identity.organization : null;
7
+ const manifest = {
8
+ id: "/",
9
+ name: settings.site.name ?? org?.name ?? "",
10
+ short_name: settings.site.alternate_name ?? org?.name ?? settings.site.name ?? "",
11
+ start_url: "/",
12
+ scope: "/",
13
+ display: "standalone",
14
+ icons: resolveIcons(settings.brand).manifestIcons
15
+ };
16
+ if (settings.brand.theme_color) manifest.theme_color = settings.brand.theme_color;
17
+ if (settings.brand.background_color) manifest.background_color = settings.brand.background_color;
18
+ return manifest;
19
+ }
20
+ function createManifestRoute(client) {
21
+ return async function GET(_request) {
22
+ const settings = await client.settings.get.call();
23
+ return new Response(JSON.stringify(buildWebManifest(settings)), { headers: { "Content-Type": "application/manifest+json" } });
24
+ };
25
+ }
26
+
27
+ //#endregion
28
+ export { WEB_MANIFEST_ROUTE, buildWebManifest, createManifestRoute };
@@ -14,6 +14,7 @@ const nextjs = {
14
14
  const apiDir = `${ctx.appDir}/api/kizlo/[[...rest]]`;
15
15
  const robotsDir = `${ctx.appDir}/robots.txt`;
16
16
  const sitemapDir = `${ctx.appDir}/sitemaps/[sitemap]`;
17
+ const manifestDir = `${ctx.appDir}/site.webmanifest`;
17
18
  return [
18
19
  {
19
20
  label: "Kizlo server instance",
@@ -84,6 +85,24 @@ export const runtime = "edge"
84
85
  export const dynamic = "force-dynamic"
85
86
 
86
87
  export const GET = createSitemapRoute(client)
88
+ `
89
+ },
90
+ {
91
+ label: "web manifest route",
92
+ relPath: `${manifestDir}/route.ts`,
93
+ contents: `import { createManifestRoute } from "kizlo/nextjs/server"
94
+ import { client } from "${ctx.serverImport(manifestDir)}"
95
+
96
+ // Run on the edge: cheaper and faster than Node for a response this small.
97
+ export const runtime = "edge"
98
+
99
+ // Like robots.txt, Vercel bakes this route into an immutable Edge CDN asset at build time,
100
+ // bypassing ISR and on-demand revalidatePath. force-dynamic opts out of that static treatment
101
+ // so brand-settings edits show up; createManifestRoute caches the WordPress call, so requests
102
+ // stay cheap.
103
+ export const dynamic = "force-dynamic"
104
+
105
+ export const GET = createManifestRoute(client)
87
106
  `
88
107
  }
89
108
  ];
package/dist/client.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { ResultClient } from "./shared/result.js";
2
1
  import { AnyProcedureRouter, ExtractProcedureByScope } from "./shared/procedure.js";
2
+ import { ResultClient } from "./shared/result.js";
3
3
 
4
4
  //#region src/client.d.ts
5
5
  interface KizloClientConfig<T extends AnyProcedureRouter> {
package/dist/context.d.ts CHANGED
@@ -5,8 +5,8 @@ import { PreviewTokenPayload } from "./shared/schema.js";
5
5
  import { ConnInfo } from "./adapters/geo.js";
6
6
  import { Logger } from "./adapters/logger.js";
7
7
  import { CookiesStorage } from "./cookie.js";
8
- import { ServiceAdapters } from "./kizlo.js";
9
8
  import { Service } from "./service.js";
9
+ import { ServiceAdapters } from "./kizlo.js";
10
10
 
11
11
  //#region src/context.d.ts
12
12
  interface ContextConfig {
package/dist/index.d.ts CHANGED
@@ -26,16 +26,19 @@ import { createCookiesAdapter } from "./adapters/cookies.js";
26
26
  import { ConnInfo, GeoAdapter, GeoGetConnInfo, createGeoAdapter, geoMock } from "./adapters/geo.js";
27
27
  import { geoVercelNext } from "./adapters/geo.vercel.js";
28
28
  import { ConsoleLogAdapterOptions, Environment, LogLevel, LogPayload, Logger, LoggerAdapter, consoleLog, createLoggerAdapter, noopAdapter } from "./adapters/logger.js";
29
- import { AnyEventSchema, AnyEvents, EventHandler, EventHandlerFn, InferEventUnion, WebhookOptions, createEventHandler, createWebhookRouter } from "./webhook/index.js";
30
- import { AnyExtension, Extension, ExtensionInitFn, ExtensionInitOptions, ExtensionInitResult, ExtractExtensionRouter, InferExtensionRouter, createExtension } from "./shared/extension.js";
31
- import { COMMON_ERRORS, CommonErrorCode, CommonErrorLiteral, CommonErrorMap, DefinedErrorMapLike, ErrorDefinition, KizloError, KizloErrorOptions, ThrowableErrorFn, ThrowableErrorMap, WithCommonErrorMap, createThrowableErrorMap, defineErrorMap, isKizloError, toKizloError } from "./shared/error.js";
32
- import { AnyKizloConfig, CreateKizloOptions, Kizlo, KizloConfig, KizloTarget, RootRouter, S2SClient, ServiceAdapters, createKizlo, resolveKizloConfig } from "./kizlo.js";
33
- import { KizloAuthorsSettings, KizloAuthorsSettingsInput, KizloCrawlingSettings, KizloCrawlingSettingsInput, KizloIdentitySettings, KizloIdentitySettingsInput, KizloMedia, KizloOrganizationFounder, KizloOrganizationSettings, KizloOrganizationSettingsInput, KizloPersonSettings, KizloPersonSettingsInput, KizloPostStatus, KizloPostTypeSettings, KizloPostTypeSettingsInput, KizloSettings, KizloSiteSettings, KizloSiteSettingsInput, KizloSocialProfile, KizloTaxonomySettings, KizloTaxonomySettingsInput, KizloWebhookSettings, KizloWebhookSettingsInput } from "./settings/service.interface.js";
34
- import { KizloSettingsService } from "./settings/service.js";
29
+ import { AuthorsSettings, AuthorsSettingsInput, BrandSettings, BrandSettingsInput, CrawlingSettings, CrawlingSettingsInput, IdentitySettings, IdentitySettingsInput, OrganizationFounder, OrganizationSettings, OrganizationSettingsInput, PersonSettings, PersonSettingsInput, PostStatusDefinition, PostTypeSettings, PostTypeSettingsInput, Settings, SiteSettings, SiteSettingsInput, SocialProfile, TaxonomySettings, TaxonomySettingsInput, WebhookSettings, WebhookSettingsInput } from "./settings/service.interface.js";
30
+ import { IconDescriptor, ManifestIcon, ResolvedIcons, resolveIcons } from "./brand/icons.js";
31
+ import { SettingsService } from "./settings/service.js";
35
32
  import { Service, ServiceConfig } from "./service.js";
36
33
  import { AuthUserFn, ConnInfoFn, Context, ContextConfig, ServerContext, VerifyCaptchaFn, VerifyPreviewTokenFn } from "./context.js";
34
+ import { AnyEventSchema, AnyEvents, EventHandler, EventHandlerFn, InferEventUnion, WebhookOptions, createEventHandler, createWebhookRouter } from "./webhook/index.js";
35
+ import { COMMON_ERRORS, CommonErrorCode, CommonErrorLiteral, CommonErrorMap, DefinedErrorMapLike, ErrorDefinition, KizloError, KizloErrorOptions, ThrowableErrorFn, ThrowableErrorMap, WithCommonErrorMap, createThrowableErrorMap, defineErrorMap, isKizloError, toKizloError } from "./shared/error.js";
37
36
  import { AnyMiddleware, ExtractMiddlewareContextOutput, InferUses, Middleware, MiddlewareHandler, MiddlewareNextFn, MiddlewareOptions, MiddlewareResult, createMiddleware } from "./shared/middleware.js";
38
37
  import { AnyProcedure, AnyProcedureRouter, BaseHandlerOptions, ExtractParams, ExtractProcedureByScope, InvocationScope, OpenapiPart, Procedure, ProcedureContext, ProcedureErrors, ProcedureHandler, ProcedureOptions, ResolveParamsPart, ResolvedSchemaInput, ResolvedSchemaOutput, RouterDepthTuple, SchemaIO, buildProcedure, combineDetailed, createProcedure, handleUnexpectedError, schemaType } from "./shared/procedure.js";
38
+ import { AnyExtension, Extension, ExtensionInitFn, ExtensionInitOptions, ExtensionInitResult, ExtractExtensionRouter, InferExtensionRouter, createExtension } from "./shared/extension.js";
39
+ import { AnyKizloConfig, CreateKizloOptions, Kizlo, KizloConfig, KizloTarget, RootRouter, S2SClient, ServiceAdapters, createKizlo, resolveKizloConfig } from "./kizlo.js";
40
+ import { WEB_MANIFEST_ROUTE, WebManifest, buildWebManifest, createManifestRoute } from "./brand/manifest.js";
41
+ import "./brand/index.js";
39
42
  import { KizloClient, KizloClientConfig, createKizloClient } from "./client.js";
40
43
  import { CreateSitemapRouteOptions, SITEMAP_BASE, SITEMAP_INDEX_SLUG, SitemapRouteExtra, createSitemapRoute } from "./seo/sitemap.js";
41
44
  import { Contract, ContractProcedure, generateContract, isContractProcedure, restoreContract } from "./shared/contract.js";
@@ -43,4 +46,4 @@ import { ShaAlgorithm, compare, hash, hmac } from "./shared/crypto.js";
43
46
  import { Identifier, parseIdentifier } from "./shared/identifier.js";
44
47
  import { createOrpcRouter } from "./shared/router.js";
45
48
  import { deserializeCurrencyFormat, deserializeListMetadata, emptyList, serializeCurrencyFormat } from "./shared/serialize.js";
46
- export { AnyContext, AnyEventSchema, AnyEvents, AnyExtension, AnyKizloConfig, AnyMiddleware, AnyNestedClient, AnyProcedure, AnyProcedureRouter, AuthAdapter, AuthGetUser, AuthUser, AuthUserFn, BaseHandlerOptions, CART_HASH_HEADER_KEY, COMMON_ERRORS, CONTENT_TYPES, CaptchaAdapter, CommentService, CommonErrorCode, CommonErrorLiteral, CommonErrorMap, ConnInfo, ConnInfoFn, ConsoleLogAdapterOptions, ContentType, Context, ContextConfig, Contract, ContractProcedure, CookiesAdapter, CookiesDeleteAll, CookiesGetAll, CookiesSetAll, CreateKizloOptions, CreateSitemapRouteOptions, CurrencyFormat, DefinedErrorMapLike, DevPluginSource, Environment, ErrorDefinition, EventHandler, EventHandlerFn, Extension, ExtensionInitFn, ExtensionInitOptions, ExtensionInitResult, ExtractExtensionRouter, ExtractMiddlewareContextOutput, ExtractParams, ExtractProcedureByScope, Fixture, FixtureCleanupFn, FixtureSeedFn, GeoAdapter, GeoGetConnInfo, HTTPMethod, Identifier, IdentifierInput, InferEventUnion, InferExtensionRouter, InferUses, InvocationScope, JsonValue, Kizlo, KizloAuthorsSettings, KizloAuthorsSettingsInput, KizloClient, KizloClientConfig, KizloConfig, KizloCrawlingSettings, KizloCrawlingSettingsInput, KizloError, KizloErrorOptions, KizloIdentitySettings, KizloIdentitySettingsInput, KizloMedia, KizloOrganizationFounder, KizloOrganizationSettings, KizloOrganizationSettingsInput, KizloPersonSettings, KizloPersonSettingsInput, KizloPostStatus, KizloPostTypeSettings, KizloPostTypeSettingsInput, KizloSettings, KizloSettingsService, KizloSiteSettings, KizloSiteSettingsInput, KizloSocialProfile, KizloTarget, KizloTaxonomySettings, KizloTaxonomySettingsInput, KizloWebhookSettings, KizloWebhookSettingsInput, LIST_ORDER, List, ListMetadata, ListOrder, ListSitemapUrlInput, ListSitemapUrlInputBase, LocalPlugin, LogLevel, LogPayload, Logger, LoggerAdapter, MaybeOptionalOptions, Media, MenuItemService, MenuService, Middleware, MiddlewareHandler, MiddlewareNextFn, MiddlewareOptions, MiddlewareResult, OpenapiPart, PluginSource, PostService, PreviewTokenData, PreviewTokenPayload, Procedure, ProcedureContext, ProcedureErrors, ProcedureHandler, ProcedureOptions, RedirectInput, RedirectStatus, ResolveParamsPart, ResolvedSchemaInput, ResolvedSchemaOutput, Robots, RobotsRule, RootRouter, RouterDepthTuple, S2SClient, SAFE_REQUEST_TIMEOUT, SITEMAP_BASE, SITEMAP_INDEX_SLUG, SchemaIO, SeedContext, Seo, SeoHead, SeoSchema, ServerContext, Service, ServiceAdapters, ServiceConfig, ShaAlgorithm, Sitemap, SitemapIndex, type SitemapIndexEntry, SitemapList, SitemapRouteExtra, SitemapUrl, SitemapUrlImage, SitemapUrlList, TestAdminUser, TestCredentials, TestUser, ThrowableErrorFn, ThrowableErrorMap, UNEXPECTED_BODY_SNIPPET_LENGTH, UserService, VerifyCaptchaFn, VerifyPreviewTokenFn, WC_CORE_BASE, WC_STORE_BASE, WPK_ListSitemapUrlInput, WPK_RobotRule, WPK_Robots, WPK_Seo, WPK_Sitemap, WPK_SitemapContentType, WPK_SitemapIndex, WPK_SitemapUrl, WPK_SitemapUrlImage, WP_AUTH_HEADER_KEY, WP_AUTH_TYPE, WP_CORE_BASE, WP_Comment, WP_CommentAvatarUrls, WP_CommentContent, WP_CommentContentInput, WP_CommentCreateErrorCode, WP_CommentCreateInput, WP_CommentDeleteErrorCode, WP_CommentDeleteInput, WP_CommentDeleteResponse, WP_CommentLinks, WP_CommentListErrorCode, WP_CommentListInput, WP_CommentOrderBy, WP_CommentRetrieveErrorCode, WP_CommentRetrieveInput, WP_CommentStatus, WP_CommentStatusFilter, WP_CommentStatusInput, WP_CommentType, WP_CommentUpdateErrorCode, WP_CommentUpdateInput, WP_CommonErrorCode, WP_Context, WP_CurrencyFormat, WP_Error, WP_ErrorData, WP_KIZLO_BASE, WP_Link, WP_List, WP_ListMetadata, WP_ListOrder, WP_Menu, WP_MenuCreateErrorCode, WP_MenuCreateInput, WP_MenuDeleteErrorCode, WP_MenuDeleteInput, WP_MenuDeleteResponse, WP_MenuItem, WP_MenuItemCreateErrorCode, WP_MenuItemCreateInput, WP_MenuItemDeleteErrorCode, WP_MenuItemDeleteInput, WP_MenuItemDeleteResponse, WP_MenuItemLinks, WP_MenuItemListErrorCode, WP_MenuItemListInput, WP_MenuItemOrderBy, WP_MenuItemRetrieveErrorCode, WP_MenuItemRetrieveInput, WP_MenuItemStatus, WP_MenuItemStatusFilter, WP_MenuItemTarget, WP_MenuItemTaxRelation, WP_MenuItemTitle, WP_MenuItemTitleInput, WP_MenuItemType, WP_MenuItemUpdateErrorCode, WP_MenuItemUpdateInput, WP_MenuLinks, WP_MenuListErrorCode, WP_MenuListInput, WP_MenuOrderBy, WP_MenuRetrieveErrorCode, WP_MenuRetrieveInput, WP_MenuUpdateErrorCode, WP_MenuUpdateInput, WP_Post, WP_PostCommentStatus, WP_PostContent, WP_PostContentInput, WP_PostCreateErrorCode, WP_PostCreateInput, WP_PostDeleteErrorCode, WP_PostDeleteInput, WP_PostDeleteResponse, WP_PostExcerpt, WP_PostExcerptInput, WP_PostFormat, WP_PostGuid, WP_PostLinks, WP_PostListErrorCode, WP_PostListInput, WP_PostOrderBy, WP_PostRetrieveErrorCode, WP_PostRetrieveInput, WP_PostStatus, WP_PostStatusFilter, WP_PostTaxRelation, WP_PostTitle, WP_PostTitleInput, WP_PostUpdateErrorCode, WP_PostUpdateInput, WP_RequestInput, WP_Result, WP_User, WP_UserAvatarUrls, WP_UserCapabilities, WP_UserCreateErrorCode, WP_UserCreateInput, WP_UserDeleteErrorCode, WP_UserDeleteInput, WP_UserDeleteMeErrorCode, WP_UserDeleteMeInput, WP_UserDeleteMeResponse, WP_UserDeleteResponse, WP_UserLinks, WP_UserListErrorCode, WP_UserListInput, WP_UserOrderBy, WP_UserRetrieveErrorCode, WP_UserRetrieveInput, WP_UserRetrieveMeErrorCode, WP_UserRetrieveMeInput, WP_UserUpdateErrorCode, WP_UserUpdateInput, WP_UserUpdateMeErrorCode, WP_UserUpdateMeInput, WP_UserWho, WebhookOptions, WithCommonErrorMap, WordPressCredentials, WordPressService, altcha, arkose, authMock, buildProcedure, combineDetailed, compare, consoleLog, createAuthAdapter, createCaptchaAdapter, createCookiesAdapter, createEventHandler, createExtension, createGeoAdapter, createKizlo, createKizloClient, createLoggerAdapter, createMiddleware, createOrpcRouter, createProcedure, createSitemapRoute, createThrowableErrorMap, createWebhookRouter, defineErrorMap, defineFixture, deserializeCurrencyFormat, deserializeListMetadata, emptyList, friendlyCaptcha, generateContract, geoMock, geoVercelNext, handleUnexpectedError, hash, hcaptcha, hmac, isContractProcedure, isKizloError, isLocalPlugin, isWordPressResourceError, noopAdapter, parseIdentifier, recaptcha, resolveKizloConfig, restoreContract, schemaType, serializeCurrencyFormat, toKizloError, turnstile };
49
+ export { AnyContext, AnyEventSchema, AnyEvents, AnyExtension, AnyKizloConfig, AnyMiddleware, AnyNestedClient, AnyProcedure, AnyProcedureRouter, AuthAdapter, AuthGetUser, AuthUser, AuthUserFn, AuthorsSettings, AuthorsSettingsInput, BaseHandlerOptions, BrandSettings, BrandSettingsInput, CART_HASH_HEADER_KEY, COMMON_ERRORS, CONTENT_TYPES, CaptchaAdapter, CommentService, CommonErrorCode, CommonErrorLiteral, CommonErrorMap, ConnInfo, ConnInfoFn, ConsoleLogAdapterOptions, ContentType, Context, ContextConfig, Contract, ContractProcedure, CookiesAdapter, CookiesDeleteAll, CookiesGetAll, CookiesSetAll, CrawlingSettings, CrawlingSettingsInput, CreateKizloOptions, CreateSitemapRouteOptions, CurrencyFormat, DefinedErrorMapLike, DevPluginSource, Environment, ErrorDefinition, EventHandler, EventHandlerFn, Extension, ExtensionInitFn, ExtensionInitOptions, ExtensionInitResult, ExtractExtensionRouter, ExtractMiddlewareContextOutput, ExtractParams, ExtractProcedureByScope, Fixture, FixtureCleanupFn, FixtureSeedFn, GeoAdapter, GeoGetConnInfo, HTTPMethod, IconDescriptor, Identifier, IdentifierInput, IdentitySettings, IdentitySettingsInput, InferEventUnion, InferExtensionRouter, InferUses, InvocationScope, JsonValue, Kizlo, KizloClient, KizloClientConfig, KizloConfig, KizloError, KizloErrorOptions, KizloTarget, LIST_ORDER, List, ListMetadata, ListOrder, ListSitemapUrlInput, ListSitemapUrlInputBase, LocalPlugin, LogLevel, LogPayload, Logger, LoggerAdapter, ManifestIcon, MaybeOptionalOptions, Media, MenuItemService, MenuService, Middleware, MiddlewareHandler, MiddlewareNextFn, MiddlewareOptions, MiddlewareResult, OpenapiPart, OrganizationFounder, OrganizationSettings, OrganizationSettingsInput, PersonSettings, PersonSettingsInput, PluginSource, PostService, PostStatusDefinition, PostTypeSettings, PostTypeSettingsInput, PreviewTokenData, PreviewTokenPayload, Procedure, ProcedureContext, ProcedureErrors, ProcedureHandler, ProcedureOptions, RedirectInput, RedirectStatus, ResolveParamsPart, ResolvedIcons, ResolvedSchemaInput, ResolvedSchemaOutput, Robots, RobotsRule, RootRouter, RouterDepthTuple, S2SClient, SAFE_REQUEST_TIMEOUT, SITEMAP_BASE, SITEMAP_INDEX_SLUG, SchemaIO, SeedContext, Seo, SeoHead, SeoSchema, ServerContext, Service, ServiceAdapters, ServiceConfig, Settings, SettingsService, ShaAlgorithm, SiteSettings, SiteSettingsInput, Sitemap, SitemapIndex, type SitemapIndexEntry, SitemapList, SitemapRouteExtra, SitemapUrl, SitemapUrlImage, SitemapUrlList, SocialProfile, TaxonomySettings, TaxonomySettingsInput, TestAdminUser, TestCredentials, TestUser, ThrowableErrorFn, ThrowableErrorMap, UNEXPECTED_BODY_SNIPPET_LENGTH, UserService, VerifyCaptchaFn, VerifyPreviewTokenFn, WC_CORE_BASE, WC_STORE_BASE, WEB_MANIFEST_ROUTE, WPK_ListSitemapUrlInput, WPK_RobotRule, WPK_Robots, WPK_Seo, WPK_Sitemap, WPK_SitemapContentType, WPK_SitemapIndex, WPK_SitemapUrl, WPK_SitemapUrlImage, WP_AUTH_HEADER_KEY, WP_AUTH_TYPE, WP_CORE_BASE, WP_Comment, WP_CommentAvatarUrls, WP_CommentContent, WP_CommentContentInput, WP_CommentCreateErrorCode, WP_CommentCreateInput, WP_CommentDeleteErrorCode, WP_CommentDeleteInput, WP_CommentDeleteResponse, WP_CommentLinks, WP_CommentListErrorCode, WP_CommentListInput, WP_CommentOrderBy, WP_CommentRetrieveErrorCode, WP_CommentRetrieveInput, WP_CommentStatus, WP_CommentStatusFilter, WP_CommentStatusInput, WP_CommentType, WP_CommentUpdateErrorCode, WP_CommentUpdateInput, WP_CommonErrorCode, WP_Context, WP_CurrencyFormat, WP_Error, WP_ErrorData, WP_KIZLO_BASE, WP_Link, WP_List, WP_ListMetadata, WP_ListOrder, WP_Menu, WP_MenuCreateErrorCode, WP_MenuCreateInput, WP_MenuDeleteErrorCode, WP_MenuDeleteInput, WP_MenuDeleteResponse, WP_MenuItem, WP_MenuItemCreateErrorCode, WP_MenuItemCreateInput, WP_MenuItemDeleteErrorCode, WP_MenuItemDeleteInput, WP_MenuItemDeleteResponse, WP_MenuItemLinks, WP_MenuItemListErrorCode, WP_MenuItemListInput, WP_MenuItemOrderBy, WP_MenuItemRetrieveErrorCode, WP_MenuItemRetrieveInput, WP_MenuItemStatus, WP_MenuItemStatusFilter, WP_MenuItemTarget, WP_MenuItemTaxRelation, WP_MenuItemTitle, WP_MenuItemTitleInput, WP_MenuItemType, WP_MenuItemUpdateErrorCode, WP_MenuItemUpdateInput, WP_MenuLinks, WP_MenuListErrorCode, WP_MenuListInput, WP_MenuOrderBy, WP_MenuRetrieveErrorCode, WP_MenuRetrieveInput, WP_MenuUpdateErrorCode, WP_MenuUpdateInput, WP_Post, WP_PostCommentStatus, WP_PostContent, WP_PostContentInput, WP_PostCreateErrorCode, WP_PostCreateInput, WP_PostDeleteErrorCode, WP_PostDeleteInput, WP_PostDeleteResponse, WP_PostExcerpt, WP_PostExcerptInput, WP_PostFormat, WP_PostGuid, WP_PostLinks, WP_PostListErrorCode, WP_PostListInput, WP_PostOrderBy, WP_PostRetrieveErrorCode, WP_PostRetrieveInput, WP_PostStatus, WP_PostStatusFilter, WP_PostTaxRelation, WP_PostTitle, WP_PostTitleInput, WP_PostUpdateErrorCode, WP_PostUpdateInput, WP_RequestInput, WP_Result, WP_User, WP_UserAvatarUrls, WP_UserCapabilities, WP_UserCreateErrorCode, WP_UserCreateInput, WP_UserDeleteErrorCode, WP_UserDeleteInput, WP_UserDeleteMeErrorCode, WP_UserDeleteMeInput, WP_UserDeleteMeResponse, WP_UserDeleteResponse, WP_UserLinks, WP_UserListErrorCode, WP_UserListInput, WP_UserOrderBy, WP_UserRetrieveErrorCode, WP_UserRetrieveInput, WP_UserRetrieveMeErrorCode, WP_UserRetrieveMeInput, WP_UserUpdateErrorCode, WP_UserUpdateInput, WP_UserUpdateMeErrorCode, WP_UserUpdateMeInput, WP_UserWho, WebManifest, WebhookOptions, WebhookSettings, WebhookSettingsInput, WithCommonErrorMap, WordPressCredentials, WordPressService, altcha, arkose, authMock, buildProcedure, buildWebManifest, combineDetailed, compare, consoleLog, createAuthAdapter, createCaptchaAdapter, createCookiesAdapter, createEventHandler, createExtension, createGeoAdapter, createKizlo, createKizloClient, createLoggerAdapter, createManifestRoute, createMiddleware, createOrpcRouter, createProcedure, createSitemapRoute, createThrowableErrorMap, createWebhookRouter, defineErrorMap, defineFixture, deserializeCurrencyFormat, deserializeListMetadata, emptyList, friendlyCaptcha, generateContract, geoMock, geoVercelNext, handleUnexpectedError, hash, hcaptcha, hmac, isContractProcedure, isKizloError, isLocalPlugin, isWordPressResourceError, noopAdapter, parseIdentifier, recaptcha, resolveIcons, resolveKizloConfig, restoreContract, schemaType, serializeCurrencyFormat, toKizloError, turnstile };
package/dist/index.js CHANGED
@@ -5,6 +5,8 @@ import { createCookiesAdapter } from "./adapters/cookies.js";
5
5
  import { createGeoAdapter, geoMock } from "./adapters/geo.js";
6
6
  import { geoVercelNext } from "./adapters/geo.vercel.js";
7
7
  import { consoleLog, createLoggerAdapter, noopAdapter } from "./adapters/logger.js";
8
+ import { resolveIcons } from "./brand/icons.js";
9
+ import { WEB_MANIFEST_ROUTE, buildWebManifest, createManifestRoute } from "./brand/manifest.js";
8
10
  import { defineFixture, isLocalPlugin } from "./cli/wp/types.js";
9
11
  import { COMMON_ERRORS, KizloError, createThrowableErrorMap, defineErrorMap, isKizloError, toKizloError } from "./shared/error.js";
10
12
  import { buildProcedure, combineDetailed, createProcedure, handleUnexpectedError, schemaType } from "./shared/procedure.js";
@@ -21,7 +23,7 @@ import { PostService } from "./wordpress/post/service.js";
21
23
  import { UserService } from "./wordpress/user/service.js";
22
24
  import { isWordPressResourceError } from "./wordpress/utils.js";
23
25
  import { WordPressService } from "./wordpress/service.js";
24
- import { KizloSettingsService } from "./settings/service.js";
26
+ import { SettingsService } from "./settings/service.js";
25
27
  import { Service } from "./service.js";
26
28
  import { Context } from "./context.js";
27
29
  import { deserializeCurrencyFormat, deserializeListMetadata, emptyList, serializeCurrencyFormat } from "./shared/serialize.js";
@@ -33,4 +35,4 @@ import { SITEMAP_BASE, SITEMAP_INDEX_SLUG, createSitemapRoute } from "./seo/site
33
35
  import { createExtension } from "./shared/extension.js";
34
36
  import { createMiddleware } from "./shared/middleware.js";
35
37
 
36
- export { CART_HASH_HEADER_KEY, COMMON_ERRORS, CONTENT_TYPES, CommentService, ContentType, Context, CurrencyFormat, IdentifierInput, Kizlo, KizloClient, KizloError, KizloSettingsService, LIST_ORDER, ListMetadata, ListOrder, ListSitemapUrlInput, ListSitemapUrlInputBase, Media, MenuItemService, MenuService, PostService, PreviewTokenData, PreviewTokenPayload, Robots, RobotsRule, SAFE_REQUEST_TIMEOUT, SITEMAP_BASE, SITEMAP_INDEX_SLUG, Seo, SeoHead, SeoSchema, Service, Sitemap, SitemapIndex, SitemapList, SitemapUrl, SitemapUrlImage, SitemapUrlList, UNEXPECTED_BODY_SNIPPET_LENGTH, UserService, WC_CORE_BASE, WC_STORE_BASE, WP_AUTH_HEADER_KEY, WP_AUTH_TYPE, WP_CORE_BASE, WP_Error, WP_KIZLO_BASE, WordPressService, altcha, arkose, authMock, buildProcedure, combineDetailed, compare, consoleLog, createAuthAdapter, createCaptchaAdapter, createCookiesAdapter, createEventHandler, createExtension, createGeoAdapter, createKizlo, createKizloClient, createLoggerAdapter, createMiddleware, createOrpcRouter, createProcedure, createSitemapRoute, createThrowableErrorMap, createWebhookRouter, defineErrorMap, defineFixture, deserializeCurrencyFormat, deserializeListMetadata, emptyList, friendlyCaptcha, generateContract, geoMock, geoVercelNext, handleUnexpectedError, hash, hcaptcha, hmac, isContractProcedure, isKizloError, isLocalPlugin, isWordPressResourceError, noopAdapter, parseIdentifier, recaptcha, resolveKizloConfig, restoreContract, schemaType, serializeCurrencyFormat, toKizloError, turnstile };
38
+ export { CART_HASH_HEADER_KEY, COMMON_ERRORS, CONTENT_TYPES, CommentService, ContentType, Context, CurrencyFormat, IdentifierInput, Kizlo, KizloClient, KizloError, LIST_ORDER, ListMetadata, ListOrder, ListSitemapUrlInput, ListSitemapUrlInputBase, Media, MenuItemService, MenuService, PostService, PreviewTokenData, PreviewTokenPayload, Robots, RobotsRule, SAFE_REQUEST_TIMEOUT, SITEMAP_BASE, SITEMAP_INDEX_SLUG, Seo, SeoHead, SeoSchema, Service, SettingsService, Sitemap, SitemapIndex, SitemapList, SitemapUrl, SitemapUrlImage, SitemapUrlList, UNEXPECTED_BODY_SNIPPET_LENGTH, UserService, WC_CORE_BASE, WC_STORE_BASE, WEB_MANIFEST_ROUTE, WP_AUTH_HEADER_KEY, WP_AUTH_TYPE, WP_CORE_BASE, WP_Error, WP_KIZLO_BASE, WordPressService, altcha, arkose, authMock, buildProcedure, buildWebManifest, combineDetailed, compare, consoleLog, createAuthAdapter, createCaptchaAdapter, createCookiesAdapter, createEventHandler, createExtension, createGeoAdapter, createKizlo, createKizloClient, createLoggerAdapter, createManifestRoute, createMiddleware, createOrpcRouter, createProcedure, createSitemapRoute, createThrowableErrorMap, createWebhookRouter, defineErrorMap, defineFixture, deserializeCurrencyFormat, deserializeListMetadata, emptyList, friendlyCaptcha, generateContract, geoMock, geoVercelNext, handleUnexpectedError, hash, hcaptcha, hmac, isContractProcedure, isKizloError, isLocalPlugin, isWordPressResourceError, noopAdapter, parseIdentifier, recaptcha, resolveIcons, resolveKizloConfig, restoreContract, schemaType, serializeCurrencyFormat, toKizloError, turnstile };
@@ -0,0 +1,8 @@
1
+ import { S2SClient } from "../../kizlo.js";
2
+ import { WEB_MANIFEST_ROUTE } from "../../brand/manifest.js";
3
+
4
+ //#region src/integrations/nextjs/manifest.d.ts
5
+ declare const MANIFEST_CACHE_TAG = "kizlo:manifest";
6
+ declare function createManifestRoute(client: S2SClient<[]>): (request: Request) => Promise<Response>;
7
+ //#endregion
8
+ export { MANIFEST_CACHE_TAG, createManifestRoute };
@@ -0,0 +1,18 @@
1
+ import { WEB_MANIFEST_ROUTE, createManifestRoute } from "../../brand/manifest.js";
2
+
3
+ //#region src/integrations/nextjs/manifest.ts
4
+ const MANIFEST_CACHE_TAG = "kizlo:manifest";
5
+ function createManifestRoute$1(client) {
6
+ const handler = createManifestRoute(client);
7
+ let getBody;
8
+ return async function GET(request) {
9
+ if (!getBody) {
10
+ const { unstable_cache } = await import("next/cache");
11
+ getBody = unstable_cache(async () => (await handler(request)).text(), [MANIFEST_CACHE_TAG], { tags: [MANIFEST_CACHE_TAG] });
12
+ }
13
+ return new Response(await getBody(), { headers: { "Content-Type": "application/manifest+json" } });
14
+ };
15
+ }
16
+
17
+ //#endregion
18
+ export { MANIFEST_CACHE_TAG, createManifestRoute$1 as createManifestRoute };
@@ -0,0 +1,17 @@
1
+ import { SeoHead } from "../../seo/schema.js";
2
+ import { S2SClient } from "../../kizlo.js";
3
+ import { Metadata, Viewport } from "next";
4
+
5
+ //#region src/integrations/nextjs/metadata.d.ts
6
+ declare function createRootMetadata(client: S2SClient<[]>): () => Promise<Metadata>;
7
+ /**
8
+ * Root `generateViewport` for `app/layout.tsx`. Emits `<meta name="theme-color">`
9
+ * from the brand theme color so the mobile browser chrome (address bar/toolbar)
10
+ * is tinted for regular visitors — distinct from the manifest `theme_color`,
11
+ * which only applies once the site is installed as an app. When a dark variant
12
+ * is set, both are emitted with `prefers-color-scheme` media queries.
13
+ */
14
+ declare function createRootViewport(client: S2SClient<[]>): () => Promise<Viewport>;
15
+ declare function createPageMetadata(head: SeoHead): Metadata;
16
+ //#endregion
17
+ export { createPageMetadata, createRootMetadata, createRootViewport };
@@ -0,0 +1,90 @@
1
+ import { resolveIcons } from "../../brand/icons.js";
2
+ import { WEB_MANIFEST_ROUTE } from "../../brand/manifest.js";
3
+
4
+ //#region src/integrations/nextjs/metadata.ts
5
+ function createRootMetadata(client) {
6
+ return async function generateMetadata() {
7
+ const settings = await client.settings.get.call();
8
+ const { icon, appleTouch } = resolveIcons(settings.brand);
9
+ const metadata = {
10
+ manifest: WEB_MANIFEST_ROUTE,
11
+ icons: {
12
+ icon: icon.map(toNextIcon),
13
+ apple: appleTouch.map(toNextIcon)
14
+ }
15
+ };
16
+ if (settings.site.url) metadata.metadataBase = new URL(settings.site.url);
17
+ return metadata;
18
+ };
19
+ }
20
+ /**
21
+ * Root `generateViewport` for `app/layout.tsx`. Emits `<meta name="theme-color">`
22
+ * from the brand theme color so the mobile browser chrome (address bar/toolbar)
23
+ * is tinted for regular visitors — distinct from the manifest `theme_color`,
24
+ * which only applies once the site is installed as an app. When a dark variant
25
+ * is set, both are emitted with `prefers-color-scheme` media queries.
26
+ */
27
+ function createRootViewport(client) {
28
+ return async function generateViewport() {
29
+ const { brand } = await client.settings.get.call();
30
+ const light = brand.theme_color;
31
+ const dark = brand.theme_color_dark;
32
+ const themeColor = [];
33
+ if (light) themeColor.push(dark ? {
34
+ media: "(prefers-color-scheme: light)",
35
+ color: light
36
+ } : { color: light });
37
+ if (dark) themeColor.push({
38
+ media: "(prefers-color-scheme: dark)",
39
+ color: dark
40
+ });
41
+ return themeColor.length ? { themeColor } : {};
42
+ };
43
+ }
44
+ function toNextIcon(icon) {
45
+ return {
46
+ url: icon.url,
47
+ type: icon.type,
48
+ sizes: icon.sizes,
49
+ media: icon.media
50
+ };
51
+ }
52
+ function createPageMetadata(head) {
53
+ return {
54
+ title: { absolute: head.title },
55
+ description: head.og.description || void 0,
56
+ alternates: { canonical: head.canonical },
57
+ robots: [
58
+ head.robots.index,
59
+ head.robots.follow,
60
+ head.robots.maxSnippet,
61
+ head.robots.maxImagePreview,
62
+ head.robots.maxVideoPreview
63
+ ].join(", "),
64
+ openGraph: {
65
+ type: head.og.type,
66
+ title: head.og.title,
67
+ description: head.og.description || void 0,
68
+ url: head.og.url,
69
+ siteName: head.og.siteName,
70
+ locale: head.og.locale,
71
+ images: head.og.image ? [{
72
+ url: head.og.image.url,
73
+ width: head.og.image.width,
74
+ height: head.og.image.height,
75
+ alt: head.og.image.alt ?? void 0
76
+ }] : void 0
77
+ },
78
+ twitter: {
79
+ card: head.twitter.card,
80
+ title: head.twitter.title,
81
+ description: head.twitter.description || void 0,
82
+ site: head.twitter.site ?? void 0,
83
+ creator: head.twitter.creator ?? void 0,
84
+ images: head.twitter.image ? [head.twitter.image] : void 0
85
+ }
86
+ };
87
+ }
88
+
89
+ //#endregion
90
+ export { createPageMetadata, createRootMetadata, createRootViewport };
package/dist/kizlo.d.ts CHANGED
@@ -5,10 +5,10 @@ import { CaptchaAdapter } from "./adapters/captcha.js";
5
5
  import { CookiesAdapter } from "./shared/types.js";
6
6
  import { GeoAdapter } from "./adapters/geo.js";
7
7
  import { Environment, LoggerAdapter } from "./adapters/logger.js";
8
+ import { Context } from "./context.js";
8
9
  import { RouterMap } from "./router.js";
9
10
  import { AnyExtension, InferExtensionRouter } from "./shared/extension.js";
10
11
  import { ResultClient } from "./shared/result.js";
11
- import { Context } from "./context.js";
12
12
 
13
13
  //#region src/kizlo.d.ts
14
14
  type AnyKizloConfig = KizloConfig<any>;
@@ -1,4 +1,7 @@
1
+ import { WEB_MANIFEST_ROUTE } from "../brand/manifest.js";
2
+ import { createRootMetadata, createRootViewport } from "../integrations/nextjs/metadata.js";
1
3
  import { KizloServerOptions, createKizlo } from "../integrations/nextjs/kizlo.server.js";
4
+ import { MANIFEST_CACHE_TAG, createManifestRoute } from "../integrations/nextjs/manifest.js";
2
5
  import { createRobotsRoute } from "../integrations/nextjs/robots.js";
3
6
  import { SITEMAP_CACHE_TAG, SITEMAP_ROUTE, createSitemapRoute } from "../integrations/nextjs/sitemap.js";
4
- export { KizloServerOptions, SITEMAP_CACHE_TAG, SITEMAP_ROUTE, createKizlo, createRobotsRoute, createSitemapRoute };
7
+ export { KizloServerOptions, MANIFEST_CACHE_TAG, SITEMAP_CACHE_TAG, SITEMAP_ROUTE, WEB_MANIFEST_ROUTE, createKizlo, createManifestRoute, createRobotsRoute, createRootMetadata, createRootViewport, createSitemapRoute };
@@ -1,5 +1,8 @@
1
+ import { WEB_MANIFEST_ROUTE } from "../brand/manifest.js";
2
+ import { createRootMetadata, createRootViewport } from "../integrations/nextjs/metadata.js";
1
3
  import { createRobotsRoute } from "../integrations/nextjs/robots.js";
2
4
  import { SITEMAP_CACHE_TAG, SITEMAP_ROUTE, createSitemapRoute } from "../integrations/nextjs/sitemap.js";
3
5
  import { createKizlo } from "../integrations/nextjs/kizlo.server.js";
6
+ import { MANIFEST_CACHE_TAG, createManifestRoute } from "../integrations/nextjs/manifest.js";
4
7
 
5
- export { SITEMAP_CACHE_TAG, SITEMAP_ROUTE, createKizlo, createRobotsRoute, createSitemapRoute };
8
+ export { MANIFEST_CACHE_TAG, SITEMAP_CACHE_TAG, SITEMAP_ROUTE, WEB_MANIFEST_ROUTE, createKizlo, createManifestRoute, createRobotsRoute, createRootMetadata, createRootViewport, createSitemapRoute };
package/dist/nextjs.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  import { KizloClientOptions, createKizloClient } from "./integrations/nextjs/kizlo.client.js";
2
- import { toMetadata } from "./integrations/nextjs/seo.js";
3
- export { KizloClientOptions, createKizloClient, toMetadata };
2
+ import { createPageMetadata } from "./integrations/nextjs/metadata.js";
3
+ export { KizloClientOptions, createKizloClient, createPageMetadata };
package/dist/nextjs.js CHANGED
@@ -1,4 +1,4 @@
1
1
  import { createKizloClient } from "./integrations/nextjs/kizlo.client.js";
2
- import { toMetadata } from "./integrations/nextjs/seo.js";
2
+ import { createPageMetadata } from "./integrations/nextjs/metadata.js";
3
3
 
4
- export { createKizloClient, toMetadata };
4
+ export { createKizloClient, createPageMetadata };
package/dist/package.js CHANGED
@@ -1,5 +1,5 @@
1
1
  //#region package.json
2
- var version = "0.3.2";
2
+ var version = "0.5.0";
3
3
 
4
4
  //#endregion
5
5
  export { version };