@noxion/core 0.0.1
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/LICENSE +21 -0
- package/README.md +38 -0
- package/dist/client.d.ts +6 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +7 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +27 -0
- package/dist/config.js.map +1 -0
- package/dist/fetcher.d.ts +9 -0
- package/dist/fetcher.d.ts.map +1 -0
- package/dist/fetcher.js +189 -0
- package/dist/fetcher.js.map +1 -0
- package/dist/frontmatter.d.ts +6 -0
- package/dist/frontmatter.d.ts.map +1 -0
- package/dist/frontmatter.js +75 -0
- package/dist/frontmatter.js.map +1 -0
- package/dist/image-downloader.d.ts +9 -0
- package/dist/image-downloader.d.ts.map +1 -0
- package/dist/image-downloader.js +95 -0
- package/dist/image-downloader.js.map +1 -0
- package/dist/image-mapper.d.ts +5 -0
- package/dist/image-mapper.d.ts.map +1 -0
- package/dist/image-mapper.js +38 -0
- package/dist/image-mapper.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin-executor.d.ts +4 -0
- package/dist/plugin-executor.d.ts.map +1 -0
- package/dist/plugin-executor.js +43 -0
- package/dist/plugin-executor.js.map +1 -0
- package/dist/plugin-loader.d.ts +4 -0
- package/dist/plugin-loader.d.ts.map +1 -0
- package/dist/plugin-loader.js +46 -0
- package/dist/plugin-loader.js.map +1 -0
- package/dist/plugin.d.ts +80 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +2 -0
- package/dist/plugin.js.map +1 -0
- package/dist/plugins/analytics.d.ts +8 -0
- package/dist/plugins/analytics.d.ts.map +1 -0
- package/dist/plugins/analytics.js +57 -0
- package/dist/plugins/analytics.js.map +1 -0
- package/dist/plugins/comments.d.ts +23 -0
- package/dist/plugins/comments.d.ts.map +1 -0
- package/dist/plugins/comments.js +55 -0
- package/dist/plugins/comments.js.map +1 -0
- package/dist/plugins/index.d.ts +7 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +4 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/rss.d.ts +10 -0
- package/dist/plugins/rss.d.ts.map +1 -0
- package/dist/plugins/rss.js +55 -0
- package/dist/plugins/rss.js.map +1 -0
- package/dist/slug.d.ts +6 -0
- package/dist/slug.d.ts.map +1 -0
- package/dist/slug.js +34 -0
- package/dist/slug.js.map +1 -0
- package/dist/types.d.ts +59 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +58 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { defineConfig, loadConfig } from "./config";
|
|
2
|
+
export { createNotionClient } from "./client";
|
|
3
|
+
export { fetchBlogPosts, fetchPage, fetchAllSlugs, fetchPostBySlug } from "./fetcher";
|
|
4
|
+
export { generateSlug, parseNotionPageId, buildPageUrl, resolveSlug } from "./slug";
|
|
5
|
+
export { parseFrontmatter, parseKeyValuePairs, applyFrontmatter } from "./frontmatter";
|
|
6
|
+
export { extractImageUrls, generateImageFilename, downloadImages } from "./image-downloader";
|
|
7
|
+
export { mapImages } from "./image-mapper";
|
|
8
|
+
export { definePlugin, loadPlugins } from "./plugin-loader";
|
|
9
|
+
export { executeHook, executeTransformHook } from "./plugin-executor";
|
|
10
|
+
export { createAnalyticsPlugin, createRSSPlugin, generateRSSXml, createCommentsPlugin, } from "./plugins/index";
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE7F,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AA0BtE,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,cAAc,EACd,oBAAoB,GACrB,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { NoxionPlugin } from "./plugin";
|
|
2
|
+
export declare function executeHook(plugins: NoxionPlugin[], hookName: keyof NoxionPlugin, args: Record<string, unknown>): Promise<void>;
|
|
3
|
+
export declare function executeTransformHook<T>(plugins: NoxionPlugin[], hookName: keyof NoxionPlugin, initialValue: T, extraArgs: Record<string, unknown>): T;
|
|
4
|
+
//# sourceMappingURL=plugin-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-executor.d.ts","sourceRoot":"","sources":["../src/plugin-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,wBAAsB,WAAW,CAC/B,OAAO,EAAE,YAAY,EAAE,EACvB,QAAQ,EAAE,MAAM,YAAY,EAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAcf;AAUD,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,OAAO,EAAE,YAAY,EAAE,EACvB,QAAQ,EAAE,MAAM,YAAY,EAC5B,YAAY,EAAE,CAAC,EACf,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,CAAC,CAyBH"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export async function executeHook(plugins, hookName, args) {
|
|
2
|
+
for (const plugin of plugins) {
|
|
3
|
+
const hookFn = plugin[hookName];
|
|
4
|
+
if (typeof hookFn !== "function")
|
|
5
|
+
continue;
|
|
6
|
+
try {
|
|
7
|
+
await hookFn(args);
|
|
8
|
+
}
|
|
9
|
+
catch (err) {
|
|
10
|
+
console.warn(`[noxion] Plugin "${plugin.name}" threw in ${String(hookName)}:`, err instanceof Error ? err.message : err);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
const TRANSFORM_INPUT_KEYS = {
|
|
15
|
+
transformContent: "recordMap",
|
|
16
|
+
transformPosts: "posts",
|
|
17
|
+
extendMetadata: "metadata",
|
|
18
|
+
extendSitemap: "entries",
|
|
19
|
+
extendRoutes: "routes",
|
|
20
|
+
};
|
|
21
|
+
export function executeTransformHook(plugins, hookName, initialValue, extraArgs) {
|
|
22
|
+
let current = initialValue;
|
|
23
|
+
const hookKey = TRANSFORM_INPUT_KEYS[hookName] ?? "value";
|
|
24
|
+
for (const plugin of plugins) {
|
|
25
|
+
const hookFn = plugin[hookName];
|
|
26
|
+
if (typeof hookFn !== "function")
|
|
27
|
+
continue;
|
|
28
|
+
try {
|
|
29
|
+
const result = hookFn({
|
|
30
|
+
...extraArgs,
|
|
31
|
+
[hookKey]: current,
|
|
32
|
+
});
|
|
33
|
+
if (result !== undefined) {
|
|
34
|
+
current = result;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
console.warn(`[noxion] Plugin "${plugin.name}" threw in ${String(hookName)}:`, err instanceof Error ? err.message : err);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return current;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=plugin-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-executor.js","sourceRoot":"","sources":["../src/plugin-executor.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAuB,EACvB,QAA4B,EAC5B,IAA6B;IAE7B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChC,IAAI,OAAO,MAAM,KAAK,UAAU;YAAE,SAAS;QAE3C,IAAI,CAAC;YACH,MAAO,MAAkE,CAAC,IAAI,CAAC,CAAC;QAClF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CACV,oBAAoB,MAAM,CAAC,IAAI,cAAc,MAAM,CAAC,QAAQ,CAAC,GAAG,EAChE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CACzC,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,oBAAoB,GAA2B;IACnD,gBAAgB,EAAE,WAAW;IAC7B,cAAc,EAAE,OAAO;IACvB,cAAc,EAAE,UAAU;IAC1B,aAAa,EAAE,SAAS;IACxB,YAAY,EAAE,QAAQ;CACvB,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAClC,OAAuB,EACvB,QAA4B,EAC5B,YAAe,EACf,SAAkC;IAElC,IAAI,OAAO,GAAG,YAAY,CAAC;IAC3B,MAAM,OAAO,GAAG,oBAAoB,CAAC,QAAkB,CAAC,IAAI,OAAO,CAAC;IAEpE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChC,IAAI,OAAO,MAAM,KAAK,UAAU;YAAE,SAAS;QAE3C,IAAI,CAAC;YACH,MAAM,MAAM,GAAI,MAAqD,CAAC;gBACpE,GAAG,SAAS;gBACZ,CAAC,OAAO,CAAC,EAAE,OAAO;aACnB,CAAC,CAAC;YACH,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,OAAO,GAAG,MAAW,CAAC;YACxB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CACV,oBAAoB,MAAM,CAAC,IAAI,cAAc,MAAM,CAAC,QAAQ,CAAC,GAAG,EAChE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CACzC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { NoxionPlugin, PluginFactory, PluginConfigEntry } from "./plugin";
|
|
2
|
+
export declare function definePlugin<Options = unknown, Content = unknown>(factory: PluginFactory<Options, Content>): PluginFactory<Options, Content>;
|
|
3
|
+
export declare function loadPlugins(entries: PluginConfigEntry[]): NoxionPlugin[];
|
|
4
|
+
//# sourceMappingURL=plugin-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-loader.d.ts","sourceRoot":"","sources":["../src/plugin-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAElB,wBAAgB,YAAY,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAC/D,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,GACvC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAEjC;AAUD,wBAAgB,WAAW,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,YAAY,EAAE,CAkCxE"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export function definePlugin(factory) {
|
|
2
|
+
return factory;
|
|
3
|
+
}
|
|
4
|
+
function isPluginFactory(entry) {
|
|
5
|
+
return typeof entry === "function";
|
|
6
|
+
}
|
|
7
|
+
function isPluginInstance(entry) {
|
|
8
|
+
return typeof entry === "object" && entry !== null && "name" in entry;
|
|
9
|
+
}
|
|
10
|
+
export function loadPlugins(entries) {
|
|
11
|
+
const plugins = [];
|
|
12
|
+
const seenNames = new Set();
|
|
13
|
+
for (const entry of entries) {
|
|
14
|
+
if (entry === false)
|
|
15
|
+
continue;
|
|
16
|
+
let plugin;
|
|
17
|
+
if (Array.isArray(entry)) {
|
|
18
|
+
const [moduleOrFactory, options] = entry;
|
|
19
|
+
if (isPluginFactory(moduleOrFactory)) {
|
|
20
|
+
plugin = moduleOrFactory(options);
|
|
21
|
+
}
|
|
22
|
+
else if (isPluginInstance(moduleOrFactory)) {
|
|
23
|
+
plugin = moduleOrFactory;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
else if (isPluginFactory(entry)) {
|
|
30
|
+
plugin = entry({});
|
|
31
|
+
}
|
|
32
|
+
else if (isPluginInstance(entry)) {
|
|
33
|
+
plugin = entry;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (seenNames.has(plugin.name)) {
|
|
39
|
+
console.warn(`[noxion] Duplicate plugin name: "${plugin.name}"`);
|
|
40
|
+
}
|
|
41
|
+
seenNames.add(plugin.name);
|
|
42
|
+
plugins.push(plugin);
|
|
43
|
+
}
|
|
44
|
+
return plugins;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=plugin-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-loader.js","sourceRoot":"","sources":["../src/plugin-loader.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,YAAY,CAC1B,OAAwC;IAExC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC;AACrC,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAA4B;IACtD,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAEpC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,KAAK,KAAK;YAAE,SAAS;QAE9B,IAAI,MAAoB,CAAC;QAEzB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,eAAe,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC;YACzC,IAAI,eAAe,CAAC,eAAe,CAAC,EAAE,CAAC;gBACrC,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC;iBAAM,IAAI,gBAAgB,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC7C,MAAM,GAAG,eAAe,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,SAAS;YACX,CAAC;QACH,CAAC;aAAM,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,MAAM,GAAG,KAAK,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,SAAS;QACX,CAAC;QAED,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,oCAAoC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;QACnE,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/plugin.d.ts
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { ExtendedRecordMap } from "notion-types";
|
|
2
|
+
import type { BlogPost, NoxionConfig } from "./types";
|
|
3
|
+
export interface HeadTag {
|
|
4
|
+
tagName: string;
|
|
5
|
+
attributes?: Record<string, string>;
|
|
6
|
+
innerHTML?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface SitemapEntry {
|
|
9
|
+
url: string;
|
|
10
|
+
lastmod?: string;
|
|
11
|
+
changefreq?: "always" | "hourly" | "daily" | "weekly" | "monthly" | "yearly" | "never";
|
|
12
|
+
priority?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface RouteInfo {
|
|
15
|
+
path: string;
|
|
16
|
+
component?: string;
|
|
17
|
+
exact?: boolean;
|
|
18
|
+
metadata?: Record<string, unknown>;
|
|
19
|
+
}
|
|
20
|
+
export interface NoxionMetadata {
|
|
21
|
+
title: string;
|
|
22
|
+
description: string;
|
|
23
|
+
canonical?: string;
|
|
24
|
+
openGraph?: Record<string, string>;
|
|
25
|
+
twitter?: Record<string, string>;
|
|
26
|
+
[key: string]: unknown;
|
|
27
|
+
}
|
|
28
|
+
export interface PluginActions {
|
|
29
|
+
addRoute: (route: RouteInfo) => void;
|
|
30
|
+
setGlobalData: (key: string, data: unknown) => void;
|
|
31
|
+
getGlobalData: (pluginName: string, key: string) => unknown;
|
|
32
|
+
}
|
|
33
|
+
export type AllContent = Record<string, unknown>;
|
|
34
|
+
export interface NoxionPlugin<Content = unknown> {
|
|
35
|
+
name: string;
|
|
36
|
+
loadContent?: () => Promise<Content> | Content;
|
|
37
|
+
contentLoaded?: (args: {
|
|
38
|
+
content: Content;
|
|
39
|
+
actions: PluginActions;
|
|
40
|
+
}) => Promise<void> | void;
|
|
41
|
+
allContentLoaded?: (args: {
|
|
42
|
+
allContent: AllContent;
|
|
43
|
+
actions: PluginActions;
|
|
44
|
+
}) => Promise<void> | void;
|
|
45
|
+
onBuildStart?: (args: {
|
|
46
|
+
config: NoxionConfig;
|
|
47
|
+
}) => Promise<void> | void;
|
|
48
|
+
postBuild?: (args: {
|
|
49
|
+
config: NoxionConfig;
|
|
50
|
+
routes: RouteInfo[];
|
|
51
|
+
}) => Promise<void> | void;
|
|
52
|
+
transformContent?: (args: {
|
|
53
|
+
recordMap: ExtendedRecordMap;
|
|
54
|
+
post: BlogPost;
|
|
55
|
+
}) => ExtendedRecordMap;
|
|
56
|
+
transformPosts?: (args: {
|
|
57
|
+
posts: BlogPost[];
|
|
58
|
+
}) => BlogPost[];
|
|
59
|
+
extendMetadata?: (args: {
|
|
60
|
+
metadata: NoxionMetadata;
|
|
61
|
+
post?: BlogPost;
|
|
62
|
+
config: NoxionConfig;
|
|
63
|
+
}) => NoxionMetadata;
|
|
64
|
+
injectHead?: (args: {
|
|
65
|
+
post?: BlogPost;
|
|
66
|
+
config: NoxionConfig;
|
|
67
|
+
}) => HeadTag[];
|
|
68
|
+
extendSitemap?: (args: {
|
|
69
|
+
entries: SitemapEntry[];
|
|
70
|
+
config: NoxionConfig;
|
|
71
|
+
}) => SitemapEntry[];
|
|
72
|
+
extendRoutes?: (args: {
|
|
73
|
+
routes: RouteInfo[];
|
|
74
|
+
config: NoxionConfig;
|
|
75
|
+
}) => RouteInfo[];
|
|
76
|
+
}
|
|
77
|
+
export type PluginFactory<Options = unknown, Content = unknown> = (options: Options) => NoxionPlugin<Content>;
|
|
78
|
+
export type PluginModule<Options = unknown, Content = unknown> = NoxionPlugin<Content> | PluginFactory<Options, Content>;
|
|
79
|
+
export type PluginConfigEntry = PluginModule | [PluginModule, unknown] | false;
|
|
80
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { NoxionPlugin } from "../plugin";
|
|
2
|
+
export interface AnalyticsPluginOptions {
|
|
3
|
+
provider: "google" | "plausible" | "umami" | "custom";
|
|
4
|
+
trackingId: string;
|
|
5
|
+
customScript?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function createAnalyticsPlugin(options: AnalyticsPluginOptions): NoxionPlugin;
|
|
8
|
+
//# sourceMappingURL=analytics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/plugins/analytics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAW,MAAM,WAAW,CAAC;AAEvD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,QAAQ,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,YAAY,CAKnF"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export function createAnalyticsPlugin(options) {
|
|
2
|
+
return {
|
|
3
|
+
name: "noxion-plugin-analytics",
|
|
4
|
+
injectHead: () => generateAnalyticsTags(options),
|
|
5
|
+
};
|
|
6
|
+
}
|
|
7
|
+
function generateAnalyticsTags(options) {
|
|
8
|
+
switch (options.provider) {
|
|
9
|
+
case "google":
|
|
10
|
+
return [
|
|
11
|
+
{
|
|
12
|
+
tagName: "script",
|
|
13
|
+
attributes: {
|
|
14
|
+
async: "true",
|
|
15
|
+
src: `https://www.googletagmanager.com/gtag/js?id=${options.trackingId}`,
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
tagName: "script",
|
|
20
|
+
innerHTML: `window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);}gtag('js',new Date());gtag('config','${options.trackingId}');`,
|
|
21
|
+
},
|
|
22
|
+
];
|
|
23
|
+
case "plausible":
|
|
24
|
+
return [
|
|
25
|
+
{
|
|
26
|
+
tagName: "script",
|
|
27
|
+
attributes: {
|
|
28
|
+
defer: "true",
|
|
29
|
+
"data-domain": options.trackingId,
|
|
30
|
+
src: "https://plausible.io/js/plausible.js",
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
];
|
|
34
|
+
case "umami":
|
|
35
|
+
return [
|
|
36
|
+
{
|
|
37
|
+
tagName: "script",
|
|
38
|
+
attributes: {
|
|
39
|
+
async: "true",
|
|
40
|
+
"data-website-id": options.trackingId,
|
|
41
|
+
src: "https://analytics.umami.is/script.js",
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
];
|
|
45
|
+
case "custom":
|
|
46
|
+
return [
|
|
47
|
+
{
|
|
48
|
+
tagName: "script",
|
|
49
|
+
attributes: {
|
|
50
|
+
async: "true",
|
|
51
|
+
src: options.customScript ?? "",
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
];
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/plugins/analytics.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,qBAAqB,CAAC,OAA+B;IACnE,OAAO;QACL,IAAI,EAAE,yBAAyB;QAC/B,UAAU,EAAE,GAAG,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC;KACjD,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,OAA+B;IAC5D,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;QACzB,KAAK,QAAQ;YACX,OAAO;gBACL;oBACE,OAAO,EAAE,QAAQ;oBACjB,UAAU,EAAE;wBACV,KAAK,EAAE,MAAM;wBACb,GAAG,EAAE,+CAA+C,OAAO,CAAC,UAAU,EAAE;qBACzE;iBACF;gBACD;oBACE,OAAO,EAAE,QAAQ;oBACjB,SAAS,EAAE,yHAAyH,OAAO,CAAC,UAAU,KAAK;iBAC5J;aACF,CAAC;QAEJ,KAAK,WAAW;YACd,OAAO;gBACL;oBACE,OAAO,EAAE,QAAQ;oBACjB,UAAU,EAAE;wBACV,KAAK,EAAE,MAAM;wBACb,aAAa,EAAE,OAAO,CAAC,UAAU;wBACjC,GAAG,EAAE,sCAAsC;qBAC5C;iBACF;aACF,CAAC;QAEJ,KAAK,OAAO;YACV,OAAO;gBACL;oBACE,OAAO,EAAE,QAAQ;oBACjB,UAAU,EAAE;wBACV,KAAK,EAAE,MAAM;wBACb,iBAAiB,EAAE,OAAO,CAAC,UAAU;wBACrC,GAAG,EAAE,sCAAsC;qBAC5C;iBACF;aACF,CAAC;QAEJ,KAAK,QAAQ;YACX,OAAO;gBACL;oBACE,OAAO,EAAE,QAAQ;oBACjB,UAAU,EAAE;wBACV,KAAK,EAAE,MAAM;wBACb,GAAG,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE;qBAChC;iBACF;aACF,CAAC;IACN,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { NoxionPlugin } from "../plugin";
|
|
2
|
+
export interface GiscusConfig {
|
|
3
|
+
repo: string;
|
|
4
|
+
repoId: string;
|
|
5
|
+
category: string;
|
|
6
|
+
categoryId: string;
|
|
7
|
+
mapping?: string;
|
|
8
|
+
theme?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface UtterancesConfig {
|
|
11
|
+
repo: string;
|
|
12
|
+
issueTerm?: string;
|
|
13
|
+
theme?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface DisqusConfig {
|
|
16
|
+
shortname: string;
|
|
17
|
+
}
|
|
18
|
+
export interface CommentsPluginOptions {
|
|
19
|
+
provider: "giscus" | "utterances" | "disqus";
|
|
20
|
+
config: GiscusConfig | UtterancesConfig | DisqusConfig;
|
|
21
|
+
}
|
|
22
|
+
export declare function createCommentsPlugin(options: CommentsPluginOptions): NoxionPlugin;
|
|
23
|
+
//# sourceMappingURL=comments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comments.d.ts","sourceRoot":"","sources":["../../src/plugins/comments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAW,MAAM,WAAW,CAAC;AAEvD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,QAAQ,GAAG,YAAY,GAAG,QAAQ,CAAC;IAC7C,MAAM,EAAE,YAAY,GAAG,gBAAgB,GAAG,YAAY,CAAC;CACxD;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,YAAY,CAKjF"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export function createCommentsPlugin(options) {
|
|
2
|
+
return {
|
|
3
|
+
name: "noxion-plugin-comments",
|
|
4
|
+
injectHead: () => generateCommentsTags(options),
|
|
5
|
+
};
|
|
6
|
+
}
|
|
7
|
+
function generateCommentsTags(options) {
|
|
8
|
+
switch (options.provider) {
|
|
9
|
+
case "giscus": {
|
|
10
|
+
const cfg = options.config;
|
|
11
|
+
return [
|
|
12
|
+
{
|
|
13
|
+
tagName: "script",
|
|
14
|
+
attributes: {
|
|
15
|
+
src: "https://giscus.app/client.js",
|
|
16
|
+
"data-repo": cfg.repo,
|
|
17
|
+
"data-repo-id": cfg.repoId,
|
|
18
|
+
"data-category": cfg.category,
|
|
19
|
+
"data-category-id": cfg.categoryId,
|
|
20
|
+
"data-mapping": cfg.mapping ?? "pathname",
|
|
21
|
+
"data-theme": cfg.theme ?? "preferred_color_scheme",
|
|
22
|
+
crossorigin: "anonymous",
|
|
23
|
+
async: "true",
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
}
|
|
28
|
+
case "utterances": {
|
|
29
|
+
const cfg = options.config;
|
|
30
|
+
return [
|
|
31
|
+
{
|
|
32
|
+
tagName: "script",
|
|
33
|
+
attributes: {
|
|
34
|
+
src: "https://utteranc.es/client.js",
|
|
35
|
+
repo: cfg.repo,
|
|
36
|
+
"issue-term": cfg.issueTerm ?? "pathname",
|
|
37
|
+
theme: cfg.theme ?? "github-light",
|
|
38
|
+
crossorigin: "anonymous",
|
|
39
|
+
async: "true",
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
}
|
|
44
|
+
case "disqus": {
|
|
45
|
+
const cfg = options.config;
|
|
46
|
+
return [
|
|
47
|
+
{
|
|
48
|
+
tagName: "script",
|
|
49
|
+
innerHTML: `var disqus_config=function(){this.page.url=window.location.href;this.page.identifier=window.location.pathname;};(function(){var d=document,s=d.createElement('script');s.src='https://${cfg.shortname}.disqus.com/embed.js';s.setAttribute('data-timestamp',+new Date());(d.head||d.body).appendChild(s);})();`,
|
|
50
|
+
},
|
|
51
|
+
];
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=comments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comments.js","sourceRoot":"","sources":["../../src/plugins/comments.ts"],"names":[],"mappings":"AA0BA,MAAM,UAAU,oBAAoB,CAAC,OAA8B;IACjE,OAAO;QACL,IAAI,EAAE,wBAAwB;QAC9B,UAAU,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC;KAChD,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,OAA8B;IAC1D,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;QACzB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,GAAG,GAAG,OAAO,CAAC,MAAsB,CAAC;YAC3C,OAAO;gBACL;oBACE,OAAO,EAAE,QAAQ;oBACjB,UAAU,EAAE;wBACV,GAAG,EAAE,8BAA8B;wBACnC,WAAW,EAAE,GAAG,CAAC,IAAI;wBACrB,cAAc,EAAE,GAAG,CAAC,MAAM;wBAC1B,eAAe,EAAE,GAAG,CAAC,QAAQ;wBAC7B,kBAAkB,EAAE,GAAG,CAAC,UAAU;wBAClC,cAAc,EAAE,GAAG,CAAC,OAAO,IAAI,UAAU;wBACzC,YAAY,EAAE,GAAG,CAAC,KAAK,IAAI,wBAAwB;wBACnD,WAAW,EAAE,WAAW;wBACxB,KAAK,EAAE,MAAM;qBACd;iBACF;aACF,CAAC;QACJ,CAAC;QAED,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,GAAG,GAAG,OAAO,CAAC,MAA0B,CAAC;YAC/C,OAAO;gBACL;oBACE,OAAO,EAAE,QAAQ;oBACjB,UAAU,EAAE;wBACV,GAAG,EAAE,+BAA+B;wBACpC,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,YAAY,EAAE,GAAG,CAAC,SAAS,IAAI,UAAU;wBACzC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,cAAc;wBAClC,WAAW,EAAE,WAAW;wBACxB,KAAK,EAAE,MAAM;qBACd;iBACF;aACF,CAAC;QACJ,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,GAAG,GAAG,OAAO,CAAC,MAAsB,CAAC;YAC3C,OAAO;gBACL;oBACE,OAAO,EAAE,QAAQ;oBACjB,SAAS,EAAE,yLAAyL,GAAG,CAAC,SAAS,0GAA0G;iBAC5T;aACF,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { createAnalyticsPlugin } from "./analytics";
|
|
2
|
+
export type { AnalyticsPluginOptions } from "./analytics";
|
|
3
|
+
export { createRSSPlugin, generateRSSXml } from "./rss";
|
|
4
|
+
export type { RSSPluginOptions } from "./rss";
|
|
5
|
+
export { createCommentsPlugin } from "./comments";
|
|
6
|
+
export type { CommentsPluginOptions, GiscusConfig, UtterancesConfig, DisqusConfig } from "./comments";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AACxD,YAAY,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,YAAY,EAAE,qBAAqB,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAExD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { NoxionPlugin } from "../plugin";
|
|
2
|
+
import type { BlogPost, NoxionConfig } from "../types";
|
|
3
|
+
export interface RSSPluginOptions {
|
|
4
|
+
feedPath?: string;
|
|
5
|
+
limit?: number;
|
|
6
|
+
fullContent?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function createRSSPlugin(options: RSSPluginOptions): NoxionPlugin;
|
|
9
|
+
export declare function generateRSSXml(posts: BlogPost[], config: NoxionConfig, options?: Pick<RSSPluginOptions, "limit">): string;
|
|
10
|
+
//# sourceMappingURL=rss.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rss.d.ts","sourceRoot":"","sources":["../../src/plugins/rss.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAW,MAAM,WAAW,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAEvD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,YAAY,CAOvE;AAgBD,wBAAgB,cAAc,CAC5B,KAAK,EAAE,QAAQ,EAAE,EACjB,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,GACxC,MAAM,CA6BR"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export function createRSSPlugin(options) {
|
|
2
|
+
const feedPath = options.feedPath ?? "/feed.xml";
|
|
3
|
+
return {
|
|
4
|
+
name: "noxion-plugin-rss",
|
|
5
|
+
injectHead: () => generateRSSHeadTags(feedPath),
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
function generateRSSHeadTags(feedPath) {
|
|
9
|
+
return [
|
|
10
|
+
{
|
|
11
|
+
tagName: "link",
|
|
12
|
+
attributes: {
|
|
13
|
+
rel: "alternate",
|
|
14
|
+
type: "application/rss+xml",
|
|
15
|
+
title: "RSS Feed",
|
|
16
|
+
href: feedPath,
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
];
|
|
20
|
+
}
|
|
21
|
+
export function generateRSSXml(posts, config, options) {
|
|
22
|
+
const baseUrl = `https://${config.domain}`;
|
|
23
|
+
const limit = options?.limit ?? 20;
|
|
24
|
+
const limited = posts.slice(0, limit);
|
|
25
|
+
const items = limited
|
|
26
|
+
.map((post) => ` <item>
|
|
27
|
+
<title>${escapeXml(post.title)}</title>
|
|
28
|
+
<link>${baseUrl}/${post.slug}</link>
|
|
29
|
+
<guid isPermaLink="true">${baseUrl}/${post.slug}</guid>
|
|
30
|
+
<pubDate>${new Date(post.date).toUTCString()}</pubDate>
|
|
31
|
+
<dc:creator>${escapeXml(config.author)}</dc:creator>
|
|
32
|
+
${post.tags.map((t) => ` <category>${escapeXml(t)}</category>`).join("\n")}
|
|
33
|
+
</item>`)
|
|
34
|
+
.join("\n");
|
|
35
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
36
|
+
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
|
|
37
|
+
<channel>
|
|
38
|
+
<title>${escapeXml(config.name)}</title>
|
|
39
|
+
<link>${baseUrl}</link>
|
|
40
|
+
<description>${escapeXml(config.description)}</description>
|
|
41
|
+
<language>${config.language}</language>
|
|
42
|
+
<atom:link href="${baseUrl}/feed.xml" rel="self" type="application/rss+xml"/>
|
|
43
|
+
${items}
|
|
44
|
+
</channel>
|
|
45
|
+
</rss>`;
|
|
46
|
+
}
|
|
47
|
+
function escapeXml(str) {
|
|
48
|
+
return str
|
|
49
|
+
.replace(/&/g, "&")
|
|
50
|
+
.replace(/</g, "<")
|
|
51
|
+
.replace(/>/g, ">")
|
|
52
|
+
.replace(/"/g, """)
|
|
53
|
+
.replace(/'/g, "'");
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=rss.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rss.js","sourceRoot":"","sources":["../../src/plugins/rss.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,eAAe,CAAC,OAAyB;IACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,WAAW,CAAC;IAEjD,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,UAAU,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,QAAQ,CAAC;KAChD,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAgB;IAC3C,OAAO;QACL;YACE,OAAO,EAAE,MAAM;YACf,UAAU,EAAE;gBACV,GAAG,EAAE,WAAW;gBAChB,IAAI,EAAE,qBAAqB;gBAC3B,KAAK,EAAE,UAAU;gBACjB,IAAI,EAAE,QAAQ;aACf;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAAiB,EACjB,MAAoB,EACpB,OAAyC;IAEzC,MAAM,OAAO,GAAG,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;IACnC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAEtC,MAAM,KAAK,GAAG,OAAO;SAClB,GAAG,CACF,CAAC,IAAI,EAAE,EAAE,CAAC;eACD,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;cACtB,OAAO,IAAI,IAAI,CAAC,IAAI;iCACD,OAAO,IAAI,IAAI,CAAC,IAAI;iBACpC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;oBAC9B,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;EAC1C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACnE,CACP;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;;;aAGI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;YACvB,OAAO;mBACA,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC;gBAChC,MAAM,CAAC,QAAQ;uBACR,OAAO;EAC5B,KAAK;;OAEA,CAAC;AACR,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,GAAG;SACP,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC"}
|
package/dist/slug.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { BlogPost } from "./types";
|
|
2
|
+
export declare function generateSlug(title: string): string;
|
|
3
|
+
export declare function parseNotionPageId(input: string): string;
|
|
4
|
+
export declare function buildPageUrl(slug: string): string;
|
|
5
|
+
export declare function resolveSlug(post: BlogPost): string;
|
|
6
|
+
//# sourceMappingURL=slug.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slug.d.ts","sourceRoot":"","sources":["../src/slug.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAYlD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAavD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAGlD"}
|
package/dist/slug.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export function generateSlug(title) {
|
|
2
|
+
if (!title)
|
|
3
|
+
return "";
|
|
4
|
+
return (title
|
|
5
|
+
.toLowerCase()
|
|
6
|
+
// keep alphanumerics, CJK characters, hyphens, spaces
|
|
7
|
+
.replace(/[^\p{L}\p{N}\s-]/gu, "")
|
|
8
|
+
.replace(/\s+/g, "-")
|
|
9
|
+
.replace(/-{2,}/g, "-")
|
|
10
|
+
.replace(/^-+|-+$/g, ""));
|
|
11
|
+
}
|
|
12
|
+
export function parseNotionPageId(input) {
|
|
13
|
+
let raw = input;
|
|
14
|
+
const urlMatch = raw.match(/([a-f0-9]{32})$/i);
|
|
15
|
+
if (urlMatch) {
|
|
16
|
+
raw = urlMatch[1];
|
|
17
|
+
}
|
|
18
|
+
const hex = raw.replace(/-/g, "");
|
|
19
|
+
if (hex.length !== 32)
|
|
20
|
+
return input;
|
|
21
|
+
// Format as UUID: 8-4-4-4-12
|
|
22
|
+
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
23
|
+
}
|
|
24
|
+
export function buildPageUrl(slug) {
|
|
25
|
+
if (slug.startsWith("/"))
|
|
26
|
+
return slug;
|
|
27
|
+
return `/${slug}`;
|
|
28
|
+
}
|
|
29
|
+
export function resolveSlug(post) {
|
|
30
|
+
if (post.slug)
|
|
31
|
+
return post.slug;
|
|
32
|
+
return generateSlug(post.title);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=slug.js.map
|
package/dist/slug.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slug.js","sourceRoot":"","sources":["../src/slug.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IAEtB,OAAO,CACL,KAAK;SACF,WAAW,EAAE;QACd,sDAAsD;SACrD,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC;SACjC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAC3B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC/C,IAAI,QAAQ,EAAE,CAAC;QACb,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAElC,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IAEpC,6BAA6B;IAC7B,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;AAC7G,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,IAAI,IAAI,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAc;IACxC,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAChC,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { ExtendedRecordMap } from "notion-types";
|
|
2
|
+
import type { PluginConfigEntry } from "./plugin";
|
|
3
|
+
export type { ExtendedRecordMap } from "notion-types";
|
|
4
|
+
export type ThemeMode = "system" | "light" | "dark";
|
|
5
|
+
export type NoxionLayout = "single-column" | "sidebar-left" | "sidebar-right";
|
|
6
|
+
export interface NoxionConfig {
|
|
7
|
+
rootNotionPageId: string;
|
|
8
|
+
rootNotionSpaceId?: string;
|
|
9
|
+
name: string;
|
|
10
|
+
domain: string;
|
|
11
|
+
author: string;
|
|
12
|
+
description: string;
|
|
13
|
+
language: string;
|
|
14
|
+
defaultTheme: ThemeMode;
|
|
15
|
+
revalidate: number;
|
|
16
|
+
revalidateSecret?: string;
|
|
17
|
+
plugins?: PluginConfig[];
|
|
18
|
+
theme?: NoxionThemeConfig;
|
|
19
|
+
layout?: NoxionLayout;
|
|
20
|
+
components?: ComponentOverrides;
|
|
21
|
+
}
|
|
22
|
+
export interface NoxionConfigInput {
|
|
23
|
+
rootNotionPageId: string;
|
|
24
|
+
rootNotionSpaceId?: string;
|
|
25
|
+
name: string;
|
|
26
|
+
domain: string;
|
|
27
|
+
author: string;
|
|
28
|
+
description: string;
|
|
29
|
+
language?: string;
|
|
30
|
+
defaultTheme?: ThemeMode;
|
|
31
|
+
revalidate?: number;
|
|
32
|
+
revalidateSecret?: string;
|
|
33
|
+
plugins?: PluginConfig[];
|
|
34
|
+
theme?: NoxionThemeConfig;
|
|
35
|
+
layout?: NoxionLayout;
|
|
36
|
+
components?: ComponentOverrides;
|
|
37
|
+
}
|
|
38
|
+
export interface BlogPost {
|
|
39
|
+
id: string;
|
|
40
|
+
title: string;
|
|
41
|
+
slug: string;
|
|
42
|
+
date: string;
|
|
43
|
+
tags: string[];
|
|
44
|
+
category?: string;
|
|
45
|
+
coverImage?: string;
|
|
46
|
+
description?: string;
|
|
47
|
+
author?: string;
|
|
48
|
+
published: boolean;
|
|
49
|
+
lastEditedTime: string;
|
|
50
|
+
frontmatter?: Record<string, string>;
|
|
51
|
+
}
|
|
52
|
+
export interface NoxionPageData {
|
|
53
|
+
recordMap: ExtendedRecordMap;
|
|
54
|
+
post: BlogPost;
|
|
55
|
+
}
|
|
56
|
+
export type PluginConfig = PluginConfigEntry;
|
|
57
|
+
export type NoxionThemeConfig = unknown;
|
|
58
|
+
export type ComponentOverrides = unknown;
|
|
59
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAElD,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAEpD,MAAM,MAAM,YAAY,GAAG,eAAe,GAAG,cAAc,GAAG,eAAe,CAAC;AAE9E,MAAM,WAAW,YAAY;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,SAAS,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,iBAAiB,CAAC;IAC7B,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,MAAM,MAAM,YAAY,GAAG,iBAAiB,CAAC;AAE7C,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC;AAExC,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|