mirror of
https://github.com/waynesutton/markdown-site.git
synced 2026-01-12 12:19:18 +00:00
Add missing changelog entries to content/pages/changelog-page.md: v1.34.0 (2025-12-26): Blog page featured layout with hero post - blogFeatured frontmatter field for posts - Hero card displays first featured post with landscape image - 2-column featured row for remaining featured posts - 3-column grid for regular posts v1.35.0 (2025-12-26): Image support at top of posts and pages - showImageAtTop frontmatter field - Full-width image display above post header - Works for both posts and pages v1.36.0 (2025-12-27): Social footer component - Customizable social links (8 platform types) - Copyright with auto-updating year - showSocialFooter frontmatter field for per-page control - Configurable via siteConfig.socialFooter v1.37.0 (2025-12-27): Newsletter Admin UI - Three-column admin interface at /newsletter-admin - Subscriber management with search and filters - Send newsletter panel (post selection or custom email) - Weekly digest automation (Sunday 9am UTC) - Developer notifications (subscriber alerts, weekly stats) - Markdown-to-HTML conversion for custom emails
633 lines
16 KiB
TypeScript
633 lines
16 KiB
TypeScript
/* eslint-disable */
|
|
/**
|
|
* Generated `api` utility.
|
|
*
|
|
* THIS CODE IS AUTOMATICALLY GENERATED.
|
|
*
|
|
* To regenerate, run `npx convex dev`.
|
|
* @module
|
|
*/
|
|
|
|
import type * as aiChatActions from "../aiChatActions.js";
|
|
import type * as aiChats from "../aiChats.js";
|
|
import type * as contact from "../contact.js";
|
|
import type * as contactActions from "../contactActions.js";
|
|
import type * as crons from "../crons.js";
|
|
import type * as http from "../http.js";
|
|
import type * as newsletter from "../newsletter.js";
|
|
import type * as newsletterActions from "../newsletterActions.js";
|
|
import type * as pages from "../pages.js";
|
|
import type * as posts from "../posts.js";
|
|
import type * as rss from "../rss.js";
|
|
import type * as search from "../search.js";
|
|
import type * as stats from "../stats.js";
|
|
|
|
import type {
|
|
ApiFromModules,
|
|
FilterApi,
|
|
FunctionReference,
|
|
} from "convex/server";
|
|
|
|
declare const fullApi: ApiFromModules<{
|
|
aiChatActions: typeof aiChatActions;
|
|
aiChats: typeof aiChats;
|
|
contact: typeof contact;
|
|
contactActions: typeof contactActions;
|
|
crons: typeof crons;
|
|
http: typeof http;
|
|
newsletter: typeof newsletter;
|
|
newsletterActions: typeof newsletterActions;
|
|
pages: typeof pages;
|
|
posts: typeof posts;
|
|
rss: typeof rss;
|
|
search: typeof search;
|
|
stats: typeof stats;
|
|
}>;
|
|
|
|
/**
|
|
* A utility for referencing Convex functions in your app's public API.
|
|
*
|
|
* Usage:
|
|
* ```js
|
|
* const myFunctionReference = api.myModule.myFunction;
|
|
* ```
|
|
*/
|
|
export declare const api: FilterApi<
|
|
typeof fullApi,
|
|
FunctionReference<any, "public">
|
|
>;
|
|
|
|
/**
|
|
* A utility for referencing Convex functions in your app's internal API.
|
|
*
|
|
* Usage:
|
|
* ```js
|
|
* const myFunctionReference = internal.myModule.myFunction;
|
|
* ```
|
|
*/
|
|
export declare const internal: FilterApi<
|
|
typeof fullApi,
|
|
FunctionReference<any, "internal">
|
|
>;
|
|
|
|
export declare const components: {
|
|
pageViewsByPath: {
|
|
btree: {
|
|
aggregateBetween: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ k1?: any; k2?: any; namespace?: any },
|
|
{ count: number; sum: number }
|
|
>;
|
|
aggregateBetweenBatch: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ queries: Array<{ k1?: any; k2?: any; namespace?: any }> },
|
|
Array<{ count: number; sum: number }>
|
|
>;
|
|
atNegativeOffset: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ k1?: any; k2?: any; namespace?: any; offset: number },
|
|
{ k: any; s: number; v: any }
|
|
>;
|
|
atOffset: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ k1?: any; k2?: any; namespace?: any; offset: number },
|
|
{ k: any; s: number; v: any }
|
|
>;
|
|
atOffsetBatch: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{
|
|
queries: Array<{
|
|
k1?: any;
|
|
k2?: any;
|
|
namespace?: any;
|
|
offset: number;
|
|
}>;
|
|
},
|
|
Array<{ k: any; s: number; v: any }>
|
|
>;
|
|
get: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ key: any; namespace?: any },
|
|
null | { k: any; s: number; v: any }
|
|
>;
|
|
offset: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ k1?: any; key: any; namespace?: any },
|
|
number
|
|
>;
|
|
offsetUntil: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ k2?: any; key: any; namespace?: any },
|
|
number
|
|
>;
|
|
paginate: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{
|
|
cursor?: string;
|
|
k1?: any;
|
|
k2?: any;
|
|
limit: number;
|
|
namespace?: any;
|
|
order: "asc" | "desc";
|
|
},
|
|
{
|
|
cursor: string;
|
|
isDone: boolean;
|
|
page: Array<{ k: any; s: number; v: any }>;
|
|
}
|
|
>;
|
|
paginateNamespaces: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ cursor?: string; limit: number },
|
|
{ cursor: string; isDone: boolean; page: Array<any> }
|
|
>;
|
|
validate: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ namespace?: any },
|
|
any
|
|
>;
|
|
};
|
|
inspect: {
|
|
display: FunctionReference<"query", "internal", { namespace?: any }, any>;
|
|
dump: FunctionReference<"query", "internal", { namespace?: any }, string>;
|
|
inspectNode: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ namespace?: any; node?: string },
|
|
null
|
|
>;
|
|
listTreeNodes: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ take?: number },
|
|
Array<{
|
|
_creationTime: number;
|
|
_id: string;
|
|
aggregate?: { count: number; sum: number };
|
|
items: Array<{ k: any; s: number; v: any }>;
|
|
subtrees: Array<string>;
|
|
}>
|
|
>;
|
|
listTrees: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ take?: number },
|
|
Array<{
|
|
_creationTime: number;
|
|
_id: string;
|
|
maxNodeSize: number;
|
|
namespace?: any;
|
|
root: string;
|
|
}>
|
|
>;
|
|
};
|
|
public: {
|
|
clear: FunctionReference<
|
|
"mutation",
|
|
"internal",
|
|
{ maxNodeSize?: number; namespace?: any; rootLazy?: boolean },
|
|
null
|
|
>;
|
|
delete_: FunctionReference<
|
|
"mutation",
|
|
"internal",
|
|
{ key: any; namespace?: any },
|
|
null
|
|
>;
|
|
deleteIfExists: FunctionReference<
|
|
"mutation",
|
|
"internal",
|
|
{ key: any; namespace?: any },
|
|
any
|
|
>;
|
|
init: FunctionReference<
|
|
"mutation",
|
|
"internal",
|
|
{ maxNodeSize?: number; namespace?: any; rootLazy?: boolean },
|
|
null
|
|
>;
|
|
insert: FunctionReference<
|
|
"mutation",
|
|
"internal",
|
|
{ key: any; namespace?: any; summand?: number; value: any },
|
|
null
|
|
>;
|
|
makeRootLazy: FunctionReference<
|
|
"mutation",
|
|
"internal",
|
|
{ namespace?: any },
|
|
null
|
|
>;
|
|
replace: FunctionReference<
|
|
"mutation",
|
|
"internal",
|
|
{
|
|
currentKey: any;
|
|
namespace?: any;
|
|
newKey: any;
|
|
newNamespace?: any;
|
|
summand?: number;
|
|
value: any;
|
|
},
|
|
null
|
|
>;
|
|
replaceOrInsert: FunctionReference<
|
|
"mutation",
|
|
"internal",
|
|
{
|
|
currentKey: any;
|
|
namespace?: any;
|
|
newKey: any;
|
|
newNamespace?: any;
|
|
summand?: number;
|
|
value: any;
|
|
},
|
|
any
|
|
>;
|
|
};
|
|
};
|
|
totalPageViews: {
|
|
btree: {
|
|
aggregateBetween: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ k1?: any; k2?: any; namespace?: any },
|
|
{ count: number; sum: number }
|
|
>;
|
|
aggregateBetweenBatch: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ queries: Array<{ k1?: any; k2?: any; namespace?: any }> },
|
|
Array<{ count: number; sum: number }>
|
|
>;
|
|
atNegativeOffset: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ k1?: any; k2?: any; namespace?: any; offset: number },
|
|
{ k: any; s: number; v: any }
|
|
>;
|
|
atOffset: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ k1?: any; k2?: any; namespace?: any; offset: number },
|
|
{ k: any; s: number; v: any }
|
|
>;
|
|
atOffsetBatch: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{
|
|
queries: Array<{
|
|
k1?: any;
|
|
k2?: any;
|
|
namespace?: any;
|
|
offset: number;
|
|
}>;
|
|
},
|
|
Array<{ k: any; s: number; v: any }>
|
|
>;
|
|
get: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ key: any; namespace?: any },
|
|
null | { k: any; s: number; v: any }
|
|
>;
|
|
offset: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ k1?: any; key: any; namespace?: any },
|
|
number
|
|
>;
|
|
offsetUntil: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ k2?: any; key: any; namespace?: any },
|
|
number
|
|
>;
|
|
paginate: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{
|
|
cursor?: string;
|
|
k1?: any;
|
|
k2?: any;
|
|
limit: number;
|
|
namespace?: any;
|
|
order: "asc" | "desc";
|
|
},
|
|
{
|
|
cursor: string;
|
|
isDone: boolean;
|
|
page: Array<{ k: any; s: number; v: any }>;
|
|
}
|
|
>;
|
|
paginateNamespaces: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ cursor?: string; limit: number },
|
|
{ cursor: string; isDone: boolean; page: Array<any> }
|
|
>;
|
|
validate: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ namespace?: any },
|
|
any
|
|
>;
|
|
};
|
|
inspect: {
|
|
display: FunctionReference<"query", "internal", { namespace?: any }, any>;
|
|
dump: FunctionReference<"query", "internal", { namespace?: any }, string>;
|
|
inspectNode: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ namespace?: any; node?: string },
|
|
null
|
|
>;
|
|
listTreeNodes: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ take?: number },
|
|
Array<{
|
|
_creationTime: number;
|
|
_id: string;
|
|
aggregate?: { count: number; sum: number };
|
|
items: Array<{ k: any; s: number; v: any }>;
|
|
subtrees: Array<string>;
|
|
}>
|
|
>;
|
|
listTrees: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ take?: number },
|
|
Array<{
|
|
_creationTime: number;
|
|
_id: string;
|
|
maxNodeSize: number;
|
|
namespace?: any;
|
|
root: string;
|
|
}>
|
|
>;
|
|
};
|
|
public: {
|
|
clear: FunctionReference<
|
|
"mutation",
|
|
"internal",
|
|
{ maxNodeSize?: number; namespace?: any; rootLazy?: boolean },
|
|
null
|
|
>;
|
|
delete_: FunctionReference<
|
|
"mutation",
|
|
"internal",
|
|
{ key: any; namespace?: any },
|
|
null
|
|
>;
|
|
deleteIfExists: FunctionReference<
|
|
"mutation",
|
|
"internal",
|
|
{ key: any; namespace?: any },
|
|
any
|
|
>;
|
|
init: FunctionReference<
|
|
"mutation",
|
|
"internal",
|
|
{ maxNodeSize?: number; namespace?: any; rootLazy?: boolean },
|
|
null
|
|
>;
|
|
insert: FunctionReference<
|
|
"mutation",
|
|
"internal",
|
|
{ key: any; namespace?: any; summand?: number; value: any },
|
|
null
|
|
>;
|
|
makeRootLazy: FunctionReference<
|
|
"mutation",
|
|
"internal",
|
|
{ namespace?: any },
|
|
null
|
|
>;
|
|
replace: FunctionReference<
|
|
"mutation",
|
|
"internal",
|
|
{
|
|
currentKey: any;
|
|
namespace?: any;
|
|
newKey: any;
|
|
newNamespace?: any;
|
|
summand?: number;
|
|
value: any;
|
|
},
|
|
null
|
|
>;
|
|
replaceOrInsert: FunctionReference<
|
|
"mutation",
|
|
"internal",
|
|
{
|
|
currentKey: any;
|
|
namespace?: any;
|
|
newKey: any;
|
|
newNamespace?: any;
|
|
summand?: number;
|
|
value: any;
|
|
},
|
|
any
|
|
>;
|
|
};
|
|
};
|
|
uniqueVisitors: {
|
|
btree: {
|
|
aggregateBetween: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ k1?: any; k2?: any; namespace?: any },
|
|
{ count: number; sum: number }
|
|
>;
|
|
aggregateBetweenBatch: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ queries: Array<{ k1?: any; k2?: any; namespace?: any }> },
|
|
Array<{ count: number; sum: number }>
|
|
>;
|
|
atNegativeOffset: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ k1?: any; k2?: any; namespace?: any; offset: number },
|
|
{ k: any; s: number; v: any }
|
|
>;
|
|
atOffset: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ k1?: any; k2?: any; namespace?: any; offset: number },
|
|
{ k: any; s: number; v: any }
|
|
>;
|
|
atOffsetBatch: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{
|
|
queries: Array<{
|
|
k1?: any;
|
|
k2?: any;
|
|
namespace?: any;
|
|
offset: number;
|
|
}>;
|
|
},
|
|
Array<{ k: any; s: number; v: any }>
|
|
>;
|
|
get: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ key: any; namespace?: any },
|
|
null | { k: any; s: number; v: any }
|
|
>;
|
|
offset: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ k1?: any; key: any; namespace?: any },
|
|
number
|
|
>;
|
|
offsetUntil: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ k2?: any; key: any; namespace?: any },
|
|
number
|
|
>;
|
|
paginate: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{
|
|
cursor?: string;
|
|
k1?: any;
|
|
k2?: any;
|
|
limit: number;
|
|
namespace?: any;
|
|
order: "asc" | "desc";
|
|
},
|
|
{
|
|
cursor: string;
|
|
isDone: boolean;
|
|
page: Array<{ k: any; s: number; v: any }>;
|
|
}
|
|
>;
|
|
paginateNamespaces: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ cursor?: string; limit: number },
|
|
{ cursor: string; isDone: boolean; page: Array<any> }
|
|
>;
|
|
validate: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ namespace?: any },
|
|
any
|
|
>;
|
|
};
|
|
inspect: {
|
|
display: FunctionReference<"query", "internal", { namespace?: any }, any>;
|
|
dump: FunctionReference<"query", "internal", { namespace?: any }, string>;
|
|
inspectNode: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ namespace?: any; node?: string },
|
|
null
|
|
>;
|
|
listTreeNodes: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ take?: number },
|
|
Array<{
|
|
_creationTime: number;
|
|
_id: string;
|
|
aggregate?: { count: number; sum: number };
|
|
items: Array<{ k: any; s: number; v: any }>;
|
|
subtrees: Array<string>;
|
|
}>
|
|
>;
|
|
listTrees: FunctionReference<
|
|
"query",
|
|
"internal",
|
|
{ take?: number },
|
|
Array<{
|
|
_creationTime: number;
|
|
_id: string;
|
|
maxNodeSize: number;
|
|
namespace?: any;
|
|
root: string;
|
|
}>
|
|
>;
|
|
};
|
|
public: {
|
|
clear: FunctionReference<
|
|
"mutation",
|
|
"internal",
|
|
{ maxNodeSize?: number; namespace?: any; rootLazy?: boolean },
|
|
null
|
|
>;
|
|
delete_: FunctionReference<
|
|
"mutation",
|
|
"internal",
|
|
{ key: any; namespace?: any },
|
|
null
|
|
>;
|
|
deleteIfExists: FunctionReference<
|
|
"mutation",
|
|
"internal",
|
|
{ key: any; namespace?: any },
|
|
any
|
|
>;
|
|
init: FunctionReference<
|
|
"mutation",
|
|
"internal",
|
|
{ maxNodeSize?: number; namespace?: any; rootLazy?: boolean },
|
|
null
|
|
>;
|
|
insert: FunctionReference<
|
|
"mutation",
|
|
"internal",
|
|
{ key: any; namespace?: any; summand?: number; value: any },
|
|
null
|
|
>;
|
|
makeRootLazy: FunctionReference<
|
|
"mutation",
|
|
"internal",
|
|
{ namespace?: any },
|
|
null
|
|
>;
|
|
replace: FunctionReference<
|
|
"mutation",
|
|
"internal",
|
|
{
|
|
currentKey: any;
|
|
namespace?: any;
|
|
newKey: any;
|
|
newNamespace?: any;
|
|
summand?: number;
|
|
value: any;
|
|
},
|
|
null
|
|
>;
|
|
replaceOrInsert: FunctionReference<
|
|
"mutation",
|
|
"internal",
|
|
{
|
|
currentKey: any;
|
|
namespace?: any;
|
|
newKey: any;
|
|
newNamespace?: any;
|
|
summand?: number;
|
|
value: any;
|
|
},
|
|
any
|
|
>;
|
|
};
|
|
};
|
|
};
|