postfolio 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3 @@
1
+ export { Slugs, Post, allPosts, MDXPost, generateSlug, generateTOC, } from "./src/main.ts";
2
+ export type { BlogFrontmatter, BlogPostSource } from "./src/main.ts";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,WAAW,GACZ,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ // index.ts
2
+ export { Slugs, Post, allPosts, MDXPost, generateSlug, generateTOC, } from "./src/main.ts";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,OAAO,EACL,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,WAAW,GACZ,MAAM,eAAe,CAAC"}
@@ -0,0 +1,33 @@
1
+ export type BlogFrontmatter = {
2
+ title?: string;
3
+ description?: string;
4
+ date?: string;
5
+ tags?: string[];
6
+ author?: string;
7
+ draft?: boolean;
8
+ [key: string]: string | string[] | boolean | undefined;
9
+ };
10
+ export type BlogPostSource = {
11
+ slug: string;
12
+ filename: string;
13
+ filePath: string;
14
+ mdx: string;
15
+ };
16
+ type TOCItem = {
17
+ level: number;
18
+ text: string;
19
+ slug: string;
20
+ };
21
+ export declare function generateSlug(text: string): string;
22
+ export declare function generateTOC(content: string): TOCItem[];
23
+ export declare function Slugs(): string[];
24
+ export declare function Post(slug: string): BlogPostSource | undefined;
25
+ export declare function allPosts(): BlogPostSource[];
26
+ export declare function MDXPost(slug: string): Promise<{
27
+ slug: string;
28
+ code: string;
29
+ frontmatter: any;
30
+ raw: string;
31
+ } | undefined>;
32
+ export {};
33
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,GAAG,SAAS,CAAC;CACxD,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAgDF,KAAK,OAAO,GAAG;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAGF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,UAKxC;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,CAgBtD;AAED,wBAAgB,KAAK,IAAI,MAAM,EAAE,CAEhC;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAE7D;AAED,wBAAgB,QAAQ,IAAI,cAAc,EAAE,CAI3C;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM;;;;;eAoBzC"}
@@ -0,0 +1,93 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { bundleMDX } from "mdx-bundler";
4
+ const BLOG_DIR_PATH = path.join(process.cwd(), "content", "blogs");
5
+ const ESBUILD_BINARY_PATH = process.platform === "win32"
6
+ ? path.join(process.cwd(), "node_modules", "esbuild", "esbuild.exe")
7
+ : path.join(process.cwd(), "node_modules", "esbuild", "bin", "esbuild");
8
+ function ensureEsbuildBinaryPath() {
9
+ if (!process.env.ESBUILD_BINARY_PATH) {
10
+ process.env.ESBUILD_BINARY_PATH = ESBUILD_BINARY_PATH;
11
+ }
12
+ }
13
+ function transformFilenameToSlug(filename) {
14
+ return filename
15
+ .replace(/\.mdx$/, "")
16
+ .toLowerCase()
17
+ .trim()
18
+ .replace(/[^a-z0-9\s-]/g, "")
19
+ .replace(/\s+/g, "-")
20
+ .replace(/-+/g, "-")
21
+ .replace(/^-+|-+$/g, "");
22
+ }
23
+ function getMdxFileNames() {
24
+ if (!fs.existsSync(BLOG_DIR_PATH)) {
25
+ return [];
26
+ }
27
+ return fs
28
+ .readdirSync(BLOG_DIR_PATH)
29
+ .filter((file) => file.endsWith(".mdx"));
30
+ }
31
+ function getPostSourceBySlug(slug) {
32
+ const filename = getMdxFileNames().find((file) => transformFilenameToSlug(file) === slug);
33
+ if (!filename) {
34
+ return undefined;
35
+ }
36
+ const filePath = path.join(BLOG_DIR_PATH, filename);
37
+ return {
38
+ slug,
39
+ filename,
40
+ filePath,
41
+ mdx: fs.readFileSync(filePath, "utf8"),
42
+ };
43
+ }
44
+ export function generateSlug(text) {
45
+ return text
46
+ .toLowerCase()
47
+ .replace(/[^\w\s-]/g, "")
48
+ .replace(/\s+/g, "-");
49
+ }
50
+ export function generateTOC(content) {
51
+ const headingRegex = /^(#{1,6})\s+(.+)$/gm;
52
+ return [...content.matchAll(headingRegex)].map((match) => {
53
+ const level = match[1].length;
54
+ const text = match[2].trim();
55
+ return {
56
+ level,
57
+ text,
58
+ slug: text
59
+ .toLowerCase()
60
+ .replace(/[^\w\s-]/g, "")
61
+ .replace(/\s+/g, "-"),
62
+ };
63
+ });
64
+ }
65
+ export function Slugs() {
66
+ return getMdxFileNames().map(transformFilenameToSlug);
67
+ }
68
+ export function Post(slug) {
69
+ return getPostSourceBySlug(slug);
70
+ }
71
+ export function allPosts() {
72
+ return Slugs()
73
+ .map(getPostSourceBySlug)
74
+ .filter((post) => Boolean(post));
75
+ }
76
+ export async function MDXPost(slug) {
77
+ const post = Post(slug);
78
+ if (!post) {
79
+ return undefined;
80
+ }
81
+ ensureEsbuildBinaryPath();
82
+ const { code, frontmatter } = await bundleMDX({
83
+ file: post.filePath,
84
+ cwd: BLOG_DIR_PATH,
85
+ });
86
+ return {
87
+ slug: post.slug,
88
+ code,
89
+ frontmatter,
90
+ raw: post.mdx
91
+ };
92
+ }
93
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import * as React from "react";
2
+ import { getMDXComponent } from "mdx-bundler/client";
3
+ export declare function Content({ code, components, }: {
4
+ code: string;
5
+ components?: React.ComponentProps<ReturnType<typeof getMDXComponent>>["components"];
6
+ }): React.JSX.Element;
7
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/renderer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,wBAAgB,OAAO,CAAC,EACtB,IAAI,EACJ,UAAU,GACX,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,KAAK,CAAC,cAAc,CAC/B,UAAU,CAAC,OAAO,eAAe,CAAC,CACnC,CAAC,YAAY,CAAC,CAAC;CACjB,qBAKA"}
@@ -0,0 +1,10 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { getMDXComponent } from "mdx-bundler/client";
5
+ export function Content({ code, components, }) {
6
+ const Render = React.useMemo(() => getMDXComponent(code), [code]);
7
+ // eslint-disable-next-line react-hooks/static-components -- mdx-bundler creates a component from compiled MDX at runtime.
8
+ return _jsx(Render, { components: components });
9
+ }
10
+ //# sourceMappingURL=renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/renderer.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,UAAU,OAAO,CAAC,EACtB,IAAI,EACJ,UAAU,GAMX;IACC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAElE,0HAA0H;IAC1H,OAAO,KAAC,MAAM,IAAC,UAAU,EAAE,UAAU,GAAI,CAAC;AAC5C,CAAC"}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "postfolio",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "main": "./index.ts",
6
+ "types": "./index.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./index.ts",
10
+ "import": "./index.ts"
11
+ },
12
+ "./renderer": {
13
+ "types": "./src/renderer.tsx",
14
+ "import": "./src/renderer.tsx"
15
+ },
16
+ "./client": {
17
+ "types": "./src/client.ts",
18
+ "import": "./src/client.ts"
19
+ }
20
+ },
21
+ "files": [
22
+ "dist"
23
+ ],
24
+ "scripts": {
25
+ "build": "tsc -p tsconfig.json"
26
+ },
27
+ "dependencies": {
28
+ "gray-matter": "^4.0.3",
29
+ "mdx-bundler": "^10.1.1"
30
+ },
31
+ "peerDependencies": {
32
+ "react": ">=19"
33
+ },
34
+ "devDependencies": {
35
+ "@types/node": "^20",
36
+ "@types/react": "^19",
37
+ "typescript": "^5"
38
+ },
39
+ "allowScripts": {
40
+ "esbuild@0.27.7": true
41
+ }
42
+ }